我首先遇到繼承代碼問題。 我有基類,它是這樣的:EF:使用流暢的API映射基類屬性
public abstract class BaseEntity
{
public DateTime? DateCreated { get; set; }
public string UserCreatedId { get; set; }
public DateTime? DateModified { get; set; }
public string UserModifiedId { get; set; }
public virtual UserState UserCreated { get; set; }
public virtual UserState UserModified { get; set; }
}
和我有繼承它,這給我的名字UserCreated_userStateId和UserModified_UserStateId一個附加列。所以我儘量流利的API是這樣的:
modelBuilder.Entity<BaseEntity>().HasOptional(x => x.UserCreated).WithMany().HasForeignKey(x => x.UserCreatedId);
modelBuilder.Entity<BaseEntity>().HasOptional(X => X.UserModified).WithMany().HasForeignKey(x => x.UserModifiedId);
但是,這給我的錯誤:「模型生成過程中檢測到一個或多個驗證錯誤:
BaseEntity::的EntityType‘BaseEntity’沒有定義鍵定義這個EntityType的關鍵 BaseEntities:EntityType:EntitySet'BaseEntities'基於沒有定義鍵的類型'BaseEntity'。「如何避免定義密鑰並只改變屬性映射?我有派生類的關鍵。
因此,你想爲每個派生類定義單個的鍵,並使用「每個具體類的表」策略?然後,您應該在派生類實體上配置基類屬性。 – grek40
如果我理解正確,你沒有使用** EF繼承**,但簡單的C#類繼承? –
是的,但我有很多派生類來一一配置它。這將會產生許多複製粘貼代碼,我不想要它。它的更好的解決方案?是的,我有C#類繼承,我嘗試獲得乾淨的模型,並獲得一切流利的API。 – CrazyBaran