當我的數據層從Telerik
遷移到EF6
時,我有POCO 命名問題。 EF
模型是從現有數據庫生成的「代碼優先」。因爲我不想更改業務層,所有遷移/配置都需要在數據層完成。我還嘗試保持EF
數據庫的代碼生成不變,以便將來維護,同時使用部分類保持原有代碼不變。EF6(代碼優先)單個外鍵屬性上的多個導航屬性
所以EF
產生POCO的一個FK
參考這樣的:
public partial class MyPoco
{
public Guid? MyForeignKeyDatabasePocoId { get; set; } /* Foreign key database column */
public virtual MyForeignKeyDatabasePoco { get; set; } /* Navigation property MyForeignKeyDatabasePocoId database column */
}
此作品開箱,因爲命名約定是正確的(產生的) 但現在我想添加一個基於導航屬性同一個數據庫FK ID(在業務層使用),
public partial class MyPoco
{
[ForeignKey("MyForeignKeyApplicationPoco", "MyForeignKeyDatabasePocoId")] /* <- not possible, no constructor accepts two parms */
public Guid? MyForeignKeyDatabasePocoId { get; set; } /* Foreign key database column */
public virtual MyForeignKeyDatabasePoco {get; set; } /* Navigation property FK MyForeignKeyDatabasePocoId database column */
public virtual MyForeignKeyApplicationPoco {get; set; } /* Navigation property FK MyForeignKeyDatabasePocoId database column */
}
我試着用[ForeignKey的(「MyForeignKeyApp裝飾Id屬性licationPoco「)],但它抱怨說」MyForeignKeyDatabasePoco「沒有(外鍵)鍵。我無法將兩個外鍵裝飾器設置爲id屬性。
MyForeignKeyDatabasePoco和MyForeignKeyApplicationPoco是相似的,它們都存在於模型中。
A)這可能嗎? B)當實體MyPoco被定義時(或者兩個或兩個fk poco的),我應該改變OnModelCreating(DbModelBuilder modelBuilder)中的某些東西嗎? C)我應該剛剛擺脫生成的導航財產有利於傳統的業務財產(不是首選選項順便說一句)
任何幫助將不勝感激。布迪後
編輯評論
與繼承解決它。第一數據庫POCO抽象然後應用程序從POCO然後數據庫POCO
public abstract partial class MyForeignKeyDatabasePoco
{
/* EF generated code */
}
public partial class MyForeignKeyApplicationPoco : MyForeignKeyDatabasePoco
{
/* additional things todo */
}
public partial class MyPoco
{
public Guid? MyForeignKeyDatabasePocoId { get; set; } /* Foreign key database column */
public virtual MyForeignKeyApplicationPoco { get; set; } /* Navigation property to MyForeignKeyDatabasePocoId database column */
}
繼承在流利模型DbSet < MyForeignKeyApplicationPoco>被添加並在流利OnModelCreating(DbModelBuilder模型構建器)modelBuilder.Entity < MyForeignKeyApplicationPoco> ();添加了。
我想你是對的。不可能使用屬性。我用繼承來解決它。使數據庫 - poco抽象和應用程序 - poco繼承數據庫 - poco。不是我理想的解決方案,但它似乎工作。 – Lextendo