-1

使用 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)相当陌生,我不知道从哪里开始寻找错误。

这里有谁知道为什么,以及如何解决这个问题?

4

3 回答 3

2

如果你仔细阅读错误信息,问题就很清楚了:

程序集“Core,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null”中类型“Vector”的属性“Item”不能用作标量属性,因为它没有 getter 和 setter。

您的类Vector有一个属性Item,它确实有一个 getter 或一个 setter,但不是两者兼有,并且 Entity Framework 需要读写属性才能正常工作。

无关注释:建议

如果您的域对象没有将它们的属性标记为虚拟(即public virtual string PropertyName),那么您将不会利用延迟加载,这意味着您的查询将加载整个结果集,最终以非常低效的数据 I/ O(更多的网络流量,更长的加载时间,并且在一天结束时,应用程序/服务更慢)。

于 2013-02-26T08:46:43.030 回答
1

如果我可能如此大胆,错误类型清楚地表明:Vector 类型(在程序集核心中)中的属性 Item 没有 agetset子句。如果您想将其与 EF 一起使用,则需要一个。

于 2013-02-26T08:46:38.310 回答
0

我发现了为什么会这样。

Vector有一个Indexer财产,又名public var this[]. 感谢另一个 StackOverflow 帖子

目前,Fluent API 无法处理此类问题,解决此问题的最简单方法是使用 Data Annotation 和[NotMapped].

生成的代码将类似于:

class Vector
{
    [NotMapped]
    public var this[]
    {
    }
}

感谢大家花时间帮助我解决这个问题。

于 2013-03-05T09:48:20.983 回答