2011-05-03 95 views
1

我很难将两个实体组合成一个实体,其中一个是只读数据的DefiningQuery。将两个表合并为一个实体框架实体与定义查询

我有一个Person实体和一个公司实体Person实体通过Company.CompanyID作为一对多的Person.CompanyID与公司实体相关。公司的数据来自不同的数据库,因此它在我的SSDL中用一个关键字表示为DefiningQuery。我想通过组合实体在Person实体的公司部分中创建字段。

Error 3024: Problem in mapping fragments starting at line 445:Must specify mapping for all key properties (Person.PersonID) of the EntitySet Person.

我假设的问题是,公司的实体没有一个是PersonID,但我不想做一个公司DefiningQuery两者是PersonID和CompanyID

回答

1

您在单有PersonCompany因为你不能将PersonCompany字段映射到同一个实体中。这种类型的映射被称为实体分割,它需要表之间的一对一关系,这些关系可以在EF中仅在共享主键上定义(因为EF不支持唯一约束)。

+0

感谢您的评论。我最近发现并将公司DefininingQuery平坦化并将PersonID添加到公司实体,因此看起来像1:1关系。现在,当我添加一个人时,出现以下错误:System.Data.UpdateException:无法更新EntitySet'CompanyView',因为它具有DefiningQuery,并且元素中不存在元素以支持当前操作。' – Heath 2011-05-04 01:05:30

+0

当然,一旦你使用了DefiningQuery,你的实体只能被读取,除非你创建并映射存储过程来插入,更新和删除。 – 2011-05-04 07:22:55

+0

我希望它是只读的,因为我不想更新公司。我现在认为它不支持将可更新表与DefingingQuery组合到一个实体中。 – Heath 2011-05-04 15:59:44