在保存之前为EF中的实体创建临时ID

时间:2013-08-23 14:10:05

标签: entity-framework many-to-many

如果我有两个具有Id的表,那么whish是一个自动生成的int(种子),无论如何我在这两个表之间有多对多关系需要另一个表。

现在,我做了一个"干运行"在保存之前为前两个表生成项目,这非常有效。问题是当我尝试在第三个表中为(多对多关系)生成项目时。在保存项目之前,前两个表中的所有ID都将设置为0,当向关系表添加项目时我没有问题,保存表时会出现问题,因为关系表的Ids为0。

有没有办法克服这个问题?比如分配一个临时值,它会在保存之前自动更改为关系表中的真实ID吗?

1 个答案:

答案 0 :(得分:0)

出于同样的原因,我选择不使用EF提供的默认种子方法(AddOrUpdate),但我更喜欢编写自己的种子方法。

现在,如果我想建立关系,我不会明确使用ID,而是使用导航属性。

想象一下这个场景:

public class User
{
public int Id {get;set;}
public string Name {get;set;}
public virtual IList<Roles> Roles { get;set;}
} 

public class Role
}
public int Id {get;set;}
public string Name {get;set;}
public virtual IList<User> Users {get;set;}
}

执行此操作会在您点击保存更改后为用户,角色和关系设置两个值:

Role admin = new Role
{
Name = "Administrator"
};


Role basic = new Role
{
Name = "Basic"
};

User user = new User
{
Name = "John",
Roles = new List<Role>()
{
   basic,
   admin
}
}

db.Users.Add(user);
db.SaveChanges();