gpt4 book ai didi

c# - Entity Framework 4.1 RC : Code First EntityTypeConfiguration inheritance issue

转载 作者:可可西里 更新时间:2023-11-01 08:42:12 27 4
gpt4 key购买 nike

我正在尝试使用一个通用的 EntityTypeConfiguration 类来为我的所有实体配置主键,以便每个派生配置类不会重复自身。我的所有实体都实现了一个通用接口(interface) IEntity(表示每个实体都必须有一个 int 类型的 Id 属性)。

我的配置基类如下所示:

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 was unhandled Message=The key component 'Id' is not a declared property on type 'Customer'. Verify that it has not been explicitly excluded from the model and that it is a valid primitive property. Source=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; }

}

谢谢!

最佳答案

看起来这些配置界面有问题。如果您将 IEntity 更改为 EntityBase,它会起作用:

public class EntityBase
{
public virtual int Id { get; set; }
}

public class Customer : EntityBase
{
public virtual string Name { get; set; }
}

public class EntityConfiguration<TEntity> : EntityTypeConfiguration<TEntity>
where TEntity : EntityBase
{
public EntityConfiguration()
{
HasKey(e => e.Id);
Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
}
}

public class CustomerConfiguration : EntityConfiguration<Customer>
{
public CustomerConfiguration()
: base()
{
...
}
}

关于c# - Entity Framework 4.1 RC : Code First EntityTypeConfiguration inheritance issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5594718/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com