Linq to Sql在Association属性中使用非列属性

时间:2013-07-05 14:37:19

标签: c#-4.0 linq-to-sql

我正在尝试在2个linq到sql实体之间创建关联,比如实体A和实体B.  A使用非列属性属性(名为BaseDocumentType)和关联中的列属性来实现" ThisKey"和#34; OtherKey"的2列属性。以下是我的Association属性定义的示例... [System.Data.Linq.Mapping.AssociationAttribute(... ThisKey =" BaseDocumentType,Column2",OtherKey =" Column1,Column2")]

当我运行它时,我收到以下错误... "数据成员' System.String BaseDocumentType'类型'图书馆'不属于' A'类型的映射的一部分。成员是否位于继承层次结构的根目录之上?"

如何使用非列属性属性定义关系,或者如何使其工作?

感谢。

1 个答案:

答案 0 :(得分:0)

信息很清楚。 LINQ to SQL将语句转换为SQL,并且您尝试使用不映射到列的属性,因此无法将其转换为SQL。

您必须从数据库中检索所需的实体,然后尝试使用LINQ to Objects查询它们,即生成的列表或数组上的LINQ操作。更好的选择是重新考虑您的设计,并找到一种方法,只从数据库中检索您需要的数据,并避免在客户端上处理结果。

在这种情况下,Linq to SQL阻止了你做一些非常危险的事情。它可以检索所有数据并使用非列属性处理它们,但这会产生巨大的性能损失。一些天真的LINQ提供商实际上就是这样做的。想象一下,从数据库中检索1000个对象只是为了找到与这个非列属性匹配的两个对象。