实体框架创建新记录

时间:2013-07-04 14:40:59

标签: c# entity-framework

我在创建新记录时有这种情况,它还会重新创建它的关联。

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记录。

3 个答案:

答案 0 :(得分:1)

您正在为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();
}

答案 1 :(得分:0)

您需要告诉您的实体是现有实体的上下文:

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();
}

答案 2 :(得分:0)

这与this question中的问题相同。对Find和SaveChanges使用相同的上下文,或者,如果由于某种原因无法完成,请使用Attach()将找到的UserGroup附加到新上下文。