属性类型不是DBContext

时间:2017-09-18 18:32:37

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

当WebAPI控制器尝试时,我收到此运行时错误(图1)  从存储库中获取数据。存储库构造函数注入了一个继承自DbContext的类(图2)。 POCO类(图3)在DbSet中指定指向SQL Server中的视图(图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);
    }
  }
}
&#13;
&#13;
&#13;

图3:

&#13;
&#13;
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;
    }
  }
}
&#13;
&#13;
&#13;

图4:

&#13;
&#13;
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
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:4)

您的属性仅限getter,这意味着它们只能由constructor parameters设置。 EF虽然没有私人制定者的任何问题,所以你可以自由使用......

    public long ConsultSID { get; private set; }

......等等。

错误消息&#34;属性类型不是有效的密钥类型&#34;在这里可能会更加重要。

答案 1 :(得分:2)

EF模型中的属性必须是可写的。

您需要添加set;个访问者。