use*_*909 1 c# entity-framework entity-framework-6
当WebAPI控制器尝试从存储库中获取数据时,出现了运行时错误(图1)。存储库构造函数注入了一个从DbContext继承的类(图2)。在DbSet中指定的POCO类(图3)指向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.Run Code Online (Sandbox Code Playgroud)
图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);
}
}
}Run Code Online (Sandbox Code Playgroud)
图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;
}
}
}Run Code Online (Sandbox Code Playgroud)
图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.sta3nRun Code Online (Sandbox Code Playgroud)
您的属性仅是吸气剂,这意味着它们只能由构造函数参数设置。EF私人设定者没有任何问题,因此您可以自由使用...
public long ConsultSID { get; private set; }
Run Code Online (Sandbox Code Playgroud)
...等
错误消息“属性类型不是有效的键类型”在这里可能要多一些。
| 归档时间: |
|
| 查看次数: |
1153 次 |
| 最近记录: |