我在 VS 2012 RC 上使用 EF 5 rc 并遇到了一些问题。很确定这与我在数据库和 EF 方面的知识有关,而不是我使用的软件的版本号 :)
所以,我有3节课。用户、角色和权利。
用户类
public class User
{
[Key]
public int UserId { get; private set; }
[Required]
public string EmailAddress { get; internal set; }
[Required]
public string Username { get; internal set; }
public ICollection<Role> Roles { get; set; }
// More properties
}
正确的阶级
public class Right
{
public virtual int RightId { get; set; }
public virtual string Description { get; set; }
}
角色类
public class Role
{
public virtual int RoleId { get; set; }
public virtual string Description { get; set; }
public virtual ICollection<Right> Rights { get; set; }
}
语境
class MyContext : DbContext
{
public virtual DbSet<User> Users { get; set; }
public virtual DbSet<Role> Roles { get; set; }
public virtual DbSet<Right> Rights { get; set; }
}
现在,我想给一个用户添加角色,给一个角色添加权限。但我也想确保可以添加相同的Right可以添加到不同的角色。
var role1 = new Role()
{
Description = "role1"
};
var role2 = new Role()
{
Description = "role2"
};
var right = new Right()
{
Description = "right"
};
context.Rights.Add(right);
context.Roles.Add(role1);
context.Roles.Add(role2);
role1.Rights = new List<Right>();
role2.Rights = new List<Right>();
role1.Rights.Add(right);
role2.Rights.Add(right);
/**** ERROR ****/
context.SaveChanges();
我越来越
InvalidOperationException:违反多重性约束。关系“Role_Rights”的角色“Role_Rights_Source”具有多重性 1 或 0..1。
我究竟做错了什么 ?另外,我对创建一个新列表感觉不正确
role1.Rights = new List<Right>();
role2.Rights = new List<Right>();
推荐的方法是什么?权利属性为空。所以我不能在没有更新的情况下添加任何东西。