我想使用一個普通的EntityTypeConfiguration類來配置我的所有實體的主鍵,以便每個派生的配置類不會重複自己。我的所有實體都實現了一個通用接口IEntity(它表示每個實體必須具有int類型的Id屬性)。實體框架4.1 RC:代碼第一個EntityTypeConfiguration繼承問題
我的配置基礎類看起來是這樣的:
public class EntityConfiguration<TEntity> : EntityTypeConfiguration<TEntity>
where TEntity : class , IEntity {
public EntityConfiguration() {
HasKey(e => e.Id);
Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
}
}
每個實體然後有它的延伸這一個這樣自己的具體配置類:
public class CustomerConfiguration : EntityConfiguration<Customer> {
public CustomerConfiguration() : base() {
// Entity specific configuration here
}
}
它編譯罰款,但我的問題在運行時,我會在EF 4.1 RC嘗試創建模型時得到以下異常:
System.InvalidOperationException是 未處理消息=關鍵組件 'Id'不是 類型'Customer'的聲明屬性。確認它沒有明確地從 模型中排除 ,並且它是有效的基元 屬性。來源=的EntityFramework
如果我改變CustomerConfiguration類從EntityTypeConfiguration <客戶>擴展和重複的主鍵的配置,然後它工作正常,但我失去了共享公共配置的能力(DRY主要是動機)。
- 我在這裏做錯了什麼?
- 是否有另一種方法來共享實體之間的共同配置?
僅供參考這裏所涉及的其他類:
public interface IEntity {
int Id { get; set; }
}
public class Customer : IEntity {
public virtual int Id { get; set; }
public virtual string name { get; set; }
}
謝謝!
是的,這是真的,但個人而言,我不喜歡依賴這些約定,並且在可能的情況下我想要配置明確,自我記錄和版本控制。遲早會有些東西可能不適合公約,所以這些問題應該可以預先解決。這個簡化示例中還沒有顯示一些共享配置,我不確定該約定是否會自動處理。 – Jamie 2011-04-08 12:17:37
「我不喜歡依賴於約定」 - 然後編寫一個測試,當約定發生變化時它會失敗,記錄事實(用代碼或其他方式)是不太理想的方法 – RhysC 2014-08-22 04:11:43