使用Code First方法并为现有系统实现数据库。因此,我不能对现有代码进行大量更改。这就是为什么我使用Fluent API和实体框架。
当我试图实现一个由其他几个类使用的新类(Vector
)时,我得到一个编译错误:
The relationship 'Price_Data' was not loaded because the type 'Vector' is not available.
The following information may be useful in resolving the previous error:
The property 'Item' of type 'Vector' in the assembly 'Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' cannot be used as a scalar property because it does not have both a getter and setter.
由于我对。net相当陌生(来自Java),我不知道从哪里开始寻找错误。
有人知道为什么,以及如何解决这个问题吗?
如果仔细阅读错误消息,问题就很清楚了:
程序集Core中Vector类型的属性Item,Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'不能使用作为标量属性,因为它没有getter和setter。
你的类Vector
有一个属性Item
,它有一个getter或setter,但不是两者都有,实体框架需要读写属性才能正常工作。
无关注释:建议
如果您的域对象没有将其属性标记为虚拟(即public virtual string PropertyName
),您将无法利用延迟加载,这意味着您的查询将加载整个结果集,最终导致非常低效的数据I/O (更多的网络流量,更长的加载时间,并且在一天结束时,更慢的应用程序/服务)。
如果我可以这么大胆,错误类型清楚地表明:类型Vector中的属性Item(在汇编核心中)没有get
和set
子句。如果你想在EF中使用它,就需要一个。
我发现了发生这种情况的原因。
Vector
有一个Indexer
属性,即public var this[]
。感谢另一个StackOverflow的帖子。
到目前为止,Fluent API还不能处理这类问题,解决这个问题的最简单方法是使用Data Annotation和[NotMapped]
。
结果代码类似于:
class Vector
{
[NotMapped]
public var this[]
{
}
}
感谢大家花时间来帮助我解决这个问题。