【发布时间】:2011-01-30 02:27:28
【问题描述】:
我按照this article 为我的实体创建了一个表类型继承模型,但是当我尝试将子类的实例添加到数据库时出现以下错误。
这是我创建子类型的方法:
var cust = db.Users.CreateObject<Customer>(); // Customer inherits User
db.Users.AddObject(cust);
db.SaveChanges();
我在最后一次调用时收到以下错误:
“在多个位置生成跨实体或关联共享的值。检查映射是否不会将 EntityKey 拆分到多个存储生成的列。”
有以下内部异常:
“已添加具有相同密钥的项目。”
关于我可能缺少什么的任何想法?
使用重现步骤更新
创建了一个空白的MS SQL Server 2008 R2数据库,并添加了以下两个表:
用户
- Id : bigint(PK 并将其设置为标识列)
- 名称:nvarchar(25) NOT NULL(无论如何,一些随机属性
客户
- Id : bigint(PK、身份列和 Users.Id 上的 FK)
- 标题:nvarchar(25) NOT NULL(也可以,一些随机属性)
接下来,我从数据库中生成了 .edmx 实体模型,并逐字点击顶部的链接。也就是说,我删除了User和Customer之间的关联,将User设置为Customer的基类,从Customer实体中删除了Id属性,并确保Customer.Id列映射到继承的User.Id属性.然后我运行了以下小程序:
using (var db = new EF_Test.testEntities())
{
var cust = db.Users.CreateObject<Customer>();
db.Users.AddObject(cust);
db.SaveChanges();
}
我得到了与上面描述的相同的异常。请让我知道这个复制品是否适合您,如果可以,我做错了什么。我在这个问题上被阻止了。
【问题讨论】:
-
该示例没有 Customer 类,因此您可能需要为任何人提供更多代码来帮助您。
标签: c# .net entity-framework c#-4.0 entity-framework-4