2017-06-04 58 views
0

使用EF Core Migrations時,工具不會拾取所有屬性,只包含「Id」和某些(不是全部)FK(導航屬性)。它似乎也很好地理解了「Table Per Hierarchy」 - 因爲它在我希望的地方設置了一個鑑別器,但遷移文件本身並不反映我在Model命名空間中的屬性(請參閱github代碼)。EF Core Migrations不會獲取所有屬性

我的DbContext都坐落在這裏:https://github.com/aredfox/TheConference/blob/master/InfoBooth/TheConference.InfoBooth.Data/InfoBoothContext.cs 我的模型類在這裏:https://github.com/aredfox/TheConference/tree/master/InfoBooth/TheConference.InfoBooth.Core/Model

你可以看一下在[https://github.com/aredfox/TheConference/blob/master/InfoBooth/TheConference.InfoBooth.Data/Migrations/20170604125116_Initial.cs]生成的 「初始遷移」。在那裏您會看到它檢測到所有Id屬性(在基類[Entity][1]中定義),但是我的Model classes的其他屬性I都沒有。

我使用了添加控制檯應用程序來運行遷移的方法(否則它將無法工作 - 請參閱關於EF Core入門的Julie Lerman's tips)。因此,在運行遷移時,我這樣做:dotnet ef --startup-project ../../TheConference.Infrastructure.ConsoleApp migrations add Initial

我一定要使用註釋模型構建器或EFCore EntityTypeConfiguration的形式,讓EF知道我要採取什麼樣的?

回答

5

你的所有類的屬性都是這樣

public string Title { get; } 

即只讀自動屬性。

EF Core不支持(映射)這樣的屬性。爲了讓他們映射,您需要提供屬性setter

public string Title { get; set; } 

訪問級別並不重要 - privateprotectedinternal會工作。唯一的要求是有一個setter。

EF Core還允許映射屬性和使用後臺字段,但所有這些都需要流暢的API配置,並且很可能無法使用僅獲取自動屬性,因爲它們由readonly字段支持。

+2

要添加更多,原始屬性和引用導航屬性需要setter。集合導航不需要setter。 (這是用戶在構造函數或默認值中編寫集合初始值設定項的常用模式)。 Id被匹配,因爲接口已經定義了setter和映射了集合導航。 – Smit

+0

感謝隊友。只要找出它與cfg'ing他們與流利的API我得到的錯誤信息,他們只讀,然後我的便士下降...感謝您的答案,但!愚蠢的錯誤,我只是忽略了。 –

+1

不客氣,隊友。它有時會發生在我們所有人身上:) –