我正在使用Entity Framework 6.0.2將一些簡單的手工編碼模型映射到現有的數據庫結構。目前的主要模式是:告訴EF 6忽略私有屬性
public class Occurrence
{
public int ID { get; set; }
public Guid LegacyID { get; set; }
public string Note { get; set; }
public virtual ICollection<OccurrenceHistory> History { get; set; }
}
(該OccurrenceHistory
模型是不是這真的相關,但部分工作正常,其中EF負載可達孩子記錄這一模式。)
的映射是簡單的,我儘可能地做到明確的,因爲我可以(因爲隨着應用的增長會有一些直觀的少映射):
public class OccurrenceMap : EntityTypeConfiguration<Occurrence>
{
public OccurrenceMap()
{
ToTable("Occurrence");
HasKey(o => o.ID);
Property(o => o.ID).IsRequired().HasColumnName("ID");
Property(o => o.LegacyID).IsRequired().HasColumnName("LegacyID");
Property(o => o.Note).IsUnicode().IsOptional().HasColumnName("Note");
}
}
但是,如果我添加了一個私有財產模型,EF試圖將其映射到數據庫。事情是這樣的:
private OccurrenceHistory CurrentHistory { get; set; }
(內部模型我會保持這一領域,對於其他私人運營的一些邏輯。)當EF生成SELECT
聲明它結束了尋找一列名爲CurrentHistory_ID
這當然不存在。
我可以讓財產公開,並設置映射忽略它:
Ignore(o => o.CurrentHistory);
但我不希望屬性是公共的。該模型將內部跟蹤應用程序代碼不應該看到的一些信息。
有沒有辦法告訴EF忽略任何和所有的私人成員?即使它是按照每個地圖的基礎?我特別喜歡這樣做,而不必將EF數據註釋添加到模型本身,因爲這不僅僅是一個漏洞抽象(持久性 - 無知模型會在其上具有持久性信息),但它也意味着包含模型的域核心組件在任何地方都會引用EntityFramework.dll
,這並不理想。
您可以在屬性上使用'[NotMapped]'屬性。 – EkoostikMartin
@EkoostikMartin:我有點希望不必在具有模型的程序集中添加對'DataAnnotations'的依賴。這感覺就像是一個抽象的漏洞,因爲模型需要持久性信息。 – David
如果你不想使用數據註解,你應該能夠以與你可以配置私有屬性相同的方式忽略私有屬性 - http://romiller.com/2012/10/01/mapping-to-private- Property-with-code-first/ – Pawel