实体框架 - 关键组件“Id”不是类型的声明属性

时间:2018-04-17 10:07:55

标签: c# database entity-framework database-design

使用实体框架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,它可以工作。但我正在寻找其他配置选项。

0 个答案:

没有答案