gpt4 book ai didi

.net - Entity Framework - 已添加具有相同键的项目。 - 尝试定义外键关系时出错

转载 作者:行者123 更新时间:2023-12-04 06:27:52 24 4
gpt4 key购买 nike

我有一个与 asp.net 成员(member)提供者用户表有外键关系的实体。

模型的这一部分如下所示:

alt text

插入Users表记录时,我似乎无法分配外键关系,包含aspnet_Users的外键的记录 table 。我不断收到错误:

An item with the same key has already been added.



我正在使用的代码如下所示:
UserAdmin userToAdd = new UserAdmin();
...
userToAdd.aspnet_Users = membershipUser;
//line above OR line below
userToAdd.aspnet_UsersReference.EntityKey = new System.Data.EntityKey("ProjectEntities.aspnet_Users", "UserId", membershipUser.UserId);

db.AddToUsers(userToAdd);
db.SaveChanges();

是我要求 EF 添加新的 aspnet_Users 的问题吗?表记录(关联主键表的记录)当该记录已经存在时?

如何将外键值分配给已经存在主键记录的实体?

更新的测试代码块:
MembershipUser membershipUser = Membership.CreateUser("blah@blah.com", "pass", "blah@blah.com");

Entities db = new Entities();
UserAdmin newUser = new UserAdmin();
newUser.Name = "blah";
newUser.DateAdded = DateTime.Now;

Guid key = new Guid(membershipUser.ProviderUserKey.ToString());
aspnet_Users membershipUserRecord = db.aspnet_Users.Where(u => u.UserId == key).FirstOrDefault();
newUser.aspnet_Users = membershipUserRecord;
//newUser.aspnet_UsersReference.EntityKey = new System.Data.EntityKey("Entities.aspnet_Users", "UserId", membershipUserRecord.UserId);
db.ObjectStateManager.ChangeObjectState(membershipUserRecord, EntityState.Unchanged);

db.AddToUsers(newUser);
db.SaveChanges();

此代码生成错误:

An item with the same key has already been added.

最佳答案

好的,我想出了这个。像往常一样,只是我犯了一个错误,没有马上捕获它,因为我找错了地方。

问题是由于我的表继承和数据库级别的配置。我将子表的(UserAdmin)外键字段定义为身份,然后在我的模型中显示为 StoreGeneratedPattern = Identity。当 EF 尝试将父项的主键传播到其子项的外键字段时,这会导致“已添加具有相同键的项目错误”。

一旦我从 UserAdmins 表中删除了身份规范,问题就消失了。

问题解决了。

关于.net - Entity Framework - 已添加具有相同键的项目。 - 尝试定义外键关系时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3594236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com