C# 实体框架重新创建新记录
我有这样一个场景:当创建一个新记录时,它也会重新创建它的关联C# 实体框架重新创建新记录,c#,entity-framework,C#,Entity Framework,我有这样一个场景:当创建一个新记录时,它也会重新创建它的关联 User newUser = new User(); newUser.UserGroupID = 1; newUser.UserGroup = UserGroup.Find(1); using (InventorySystemEntities context = new InventorySystemEntities(new ConfigurationManager().ConnectionString)) { contex
User newUser = new User();
newUser.UserGroupID = 1;
newUser.UserGroup = UserGroup.Find(1);
using (InventorySystemEntities context = new InventorySystemEntities(new ConfigurationManager().ConnectionString))
{
context.Users.Add(newUser);
context.SaveChanges();
}
当我保存它时,它会创建一个新的用户记录,也会创建一个新的用户组记录。您正在为UserGroup.Find()和Users.Add()使用不同的上下文。这不好-对这两个都使用相同的上下文,它会很好地工作
using (InventorySystemEntities context = new InventorySystemEntities(new ConfigurationManager().ConnectionString))
{
var newUser = new context.Users.CreateNew();
newUser.UserGroup = context.UserGroup.Find(1);
context.Users.Add(newUser);
context.SaveChanges();
}
您需要告诉上下文您的实体是一个现有实体:
User newUser = new User();
newUser.UserGroupID = 1;
newUser.UserGroup = UserGroup.Find(1);
using (InventorySystemEntities context = new InventorySystemEntities(new ConfigurationManager().ConnectionString))
{
context.UserGroups.Attach(newUser.UserGroup);
context.Users.Add(newUser);
context.SaveChanges();
}
这与中的问题相同。可以使用相同的上下文来查找和保存更改,或者,如果由于某种原因无法完成,请使用Attach()将找到的用户组附加到新上下文。只需附带说明-您不必设置UserGroup和UserGroupId-两者中的一个就足够了-EF将处理它。