Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架重新创建新记录_C#_Entity Framework - Fatal编程技术网

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将处理它。