c# - 属性类型不是 DBContext 中的有效键类型

标签 c# entity-framework entity-framework-6

当 WebAPI Controller 尝试时,我收到此运行时错误(图 1) 从存储库中获取数据。存储库构造函数注入(inject)了一个从 DbContext 继承的类(图 2)。 POCO 类(图 3)在 SQL Server 中指定一个 DbSet 指向 View (图 4)。在表键的 OnModelCreating() 中也指定了。为什么错误仍然发生?谢谢。

图 1:

System.InvalidOperationException occurred
  HResult=0x80131509
  Message=The property 'ConsultSID' cannot be used as 
  a key property on the entity 'ConsultTB' because the 
  property type is not a valid key type. Only scalar types, 
  string and byte[] are supported key types.

图 2:

namespace myOrg.Repository {
  public class MyDb: DbContext {
    public MyDb(): base("name=MyConnectionString") {}

    public virtual DbSet < ConsultTB > ConsultTBs {
      get;
      set;
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
      modelBuilder.Entity < ConsultTB > ().ToTable("vConsultTB", "App");

      modelBuilder.Entity<ConsultTB>().HasKey(c => c.ConsultSID);
    }
  }
}

图 3:

namespace myOrg.Data {
  public class ConsultTB {
    //[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    //[Column("ConsultSID")]
    public long ConsultSID {
      get;
    }
    public int ServiceId {
      get;
    }
    public string ServiceName {
      get;
    }
    public short Sta3n {
      get;
    }
    public string StationName {
      get;
    }
    public DateTime RequestDate {
      get;
    }
  }
}

图 4:

ALTER VIEW[App].[vConsultTB]
AS
SELECT
  ISNULL(A.[ConsultSID], -1) ConsultSID, A.[Sta3n], A.[PatientSID], A.[StationName],
  A.[RequestDate],
  p.patientIEN, p.PatientName, p.PatientLastName, p.PatientFirstName, p.PatientSSN, p.StreetAddress1, p.StreetAddress2, p.StreetAddress3
FROM[schema1].[ConsultTB_Consults] A
inner join[dbserver2].[schema2].[SPatient] P
on a.patientSID = p.patientSID and a.sta3n = p.sta3n

最佳答案

您的属性是 getter-only,这意味着它们只能由 constructor parameters 设置. EF 对私有(private) setter 没有任何问题,因此您可以自由使用...

    public long ConsultSID { get; private set; }

...等等

错误消息“属性类型不是有效的键类型”可能在这里更重要。

关于c# - 属性类型不是 DBContext 中的有效键类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46286001/

相关文章:

C# 登录屏幕 - 在 SQL 表中查找用户并更新字段

C# HttpClient Cookie 和 session ID 问题

c# - 在 Entity Framework 上创建外键关系的问题

entity-framework - EF - 和存储库模式 - 多个上下文

c# - Entity Framework 通过在没有选择的情况下将当前值增加一来更新一列

c# - 在 C# 中使用 "Class"

c# - 对象是否有属性

c# - 构建我的应用程序,创建可执行文件和安装程序

c# - 尝试使用通用存储库更新 EF 中的类时出现 `Attaching an entity of type failed...` 异常

c# - 调用用户定义的数据库函数