使用实体框架6.2,定位框架4.6.1。
我得到了这个基类:
public abstract class Entity
{
[NotMapped]
public virtual ulong Id { get; set; }
internal virtual long ID
{
get
{unchecked{return (long)Id;}}
set
{unchecked{Id = (ulong)value;}}
}
}
和扩展基类的类
public class AccountingTransaction : Entity
{
//other propeties
}
我的配置如下:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Types<AccountingTransaction>().Configure(c => c.Ignore(x => x.Id));
modelBuilder.Entity<AccountingTransaction>()
.Property(x => x.ID)
.IsRequired()
.HasColumnName("ID");
modelBuilder.Entity<AccountingTransaction>()
.HasKey(x => x.ID);
}
尝试初始化db时出现错误:
System.InvalidOperationException Message =关键组件“ID”是 不是'AccountingTransaction'类型的声明属性。验证 它没有明确排除在模型之外,而且它是一个 有效的原始财产。
我支持mulitply框架(.net标准2.0和.net 4.6.1)在.net标准上配置的类似代码,在.net 4.6.1项目上运行此代码失败。
我是否必须单独指定每个实体的ID?这会很烦人,因为ulong的映射和可靠性的可读性会很糟糕。如果有人回答请使用fluentApi。
// EDIT 如果我将Id从Entity类移动到AccountingTransaction,它可以工作。但我正在寻找其他配置选项。