2013-07-05 59 views
0

我试图创建2个linq到sql实体之间的关联,比如实体A和实体B. A使用非列属性属性(名为BaseDocumentType)以及“ThisKey”的关联中的列属性以及“OtherKey”的2个列属性。以下是我的协会属性定义的示例... [System.Data.Linq.Mapping.AssociationAttribute(... ThisKey = “BaseDocumentType,列2”,OtherKey = “column1的,列2”)]Linq to Sql使用关联属性中的非列属性

当我运行它时,出现以下错误... “类型'Library'的数据成员'System.String BaseDocumentType'不是类型'A'的映射的一部分。成员是继承层次?”

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

谢谢。

+0

这里的问题是您的继承模型不能很好地与LINQ to SQL一起工作。如果您可以添加关于使用继承模型的表和实体的信息,我们可能会提供一些其他选择。最初,我会说你的BaseDocumentType可能会更好,而不是基类,因为我怀疑你的EntityA和EntityB是BaseDocumentType的子类型,而是实现一个IDocumentType接口。 EF确实支持你想要的映射,但是性能可能会低于预期。 –

回答

0

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

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

Linq to SQL在这种情况下阻止您执行某些非常危险的操作。它可以检索所有数据并使用非列属性处理它们,但这会造成巨大的性能下降。一些天真的LINQ提供者实际上就是这么做的。想象一下,从数据库中检索1000个对象,只找到匹配这个非列属性的两个对象。