我首先遇到继承代码问题。 我有基类,它是这样的: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