第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

“擁有的實(shí)體類型需要通過導(dǎo)航從另一個(gè)實(shí)體類型引用”

“擁有的實(shí)體類型需要通過導(dǎo)航從另一個(gè)實(shí)體類型引用”

C#
蝴蝶刀刀 2021-11-14 16:04:51
我的應(yīng)用程序中有一個(gè)名為 Person 的實(shí)體。有兩種類型的用戶,學(xué)生和教授,它們繼承自 Person。每個(gè)人都有一個(gè)設(shè)置屬性:public abstract class Person{    public Guid UserId { get; set; }    public string Name { get; set; }    public PersonSettings Settings { get; set; }}public class Student : Person{}public class Professor : Person{}我的 PersonSettings 類只是幾個(gè)屬性。它不是要存儲(chǔ)在數(shù)據(jù)庫中的實(shí)體,因此我將其標(biāo)記為擁有:[Owned]public class PersonSettings{    public bool NotificationsEnabled { get; set; }    public int GymPassId { get; set; }}這些作為 json 存儲(chǔ)在數(shù)據(jù)庫中,我在我的 Person 實(shí)體配置中使用 EF Core 轉(zhuǎn)換值來對(duì)其進(jìn)行序列化和反序列化:builder.Property(p => p.Settings).HasConversion(    s => JsonConvert.SerializeObject(s, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }),    s => JsonConvert.DeserializeObject<PersonSettings>(s, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }));但是當(dāng)我嘗試運(yùn)行我的應(yīng)用程序并進(jìn)行數(shù)據(jù)庫遷移時(shí),我收到一條錯(cuò)誤消息擁有的實(shí)體類型“PersonSettings”需要通過導(dǎo)航從另一個(gè)實(shí)體類型中引用。向指向“PersonSettings”的實(shí)體類型添加導(dǎo)航。我應(yīng)該在這里做什么?我在錯(cuò)誤消息中找不到任何內(nèi)容。不確定它是否與 Person 作為抽象類有關(guān)。
查看完整描述

2 回答

?
鳳凰求蠱

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊

我也無法重現(xiàn),但您不需要這里的擁有類型。

使用擁有的類型是使用非標(biāo)量屬性的 JSON 序列化的替代方法。使用擁有的類型時(shí),類型與引用它的實(shí)體一起存儲(chǔ)。因此,擁有類型 EF 將創(chuàng)建具有單獨(dú)的 Settings_NotificationEnabled 和 Settings_GymPassId 列的 Person 表。

因此,您可以簡單地刪除 OwnedAttribute,并確保您沒有將其聲明為DbSet<PersonSettings>DbContext 中具有類型屬性的實(shí)體。

至于選擇哪個(gè),我通常會(huì)在這種情況下使用擁有類型,因此您可以通過各個(gè) PersonSettings 屬性查詢數(shù)據(jù)庫。

使用非標(biāo)量屬性的JSON轉(zhuǎn)換對(duì),你有一個(gè)集合的情況下非常有用,因?yàn)镋F核心目前不支持所屬類型的集合。


查看完整回答
反對(duì) 回復(fù) 2021-11-14
?
一只甜甜圈

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊

我遇到了同樣的問題,為我解決的是遵循此處的文檔。


基本上你想要做的是OwnsOne在你的實(shí)體配置中添加一個(gè)Person:


builder.OwnsOne(p => p.PersonSettings, ps => {

    //if need be add additional settings here for NotificationsEnabled and GymPassId

});

這將在 Person 和 PersonSettings 之間創(chuàng)建一個(gè)“鏈接”,遷移生成器使用它來構(gòu)建腳本。


查看完整回答
反對(duì) 回復(fù) 2021-11-14
  • 2 回答
  • 0 關(guān)注
  • 172 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)