我采用code frist方式:
User表
Role表
UsersInRoles表
User:
public class User
{
public string UserId { get; set; }
public string UserName { get; set; }
public virtual ICollection<User> Roles { get; set; }
}
Role:
public class Role
{
public string RoleId { get; set; }
public string RoleName { get; set; }
public virtual ICollection<Role> Roles { get; set; }
}
public class DbEntities : DbContext
{
public IDbSet<User> Users { get; set; }
public IDbSet<Role> Roles { get; set; }
modelBuilder.Entity<User>().Property(i => i.UserId)
.HasDatabaseGen eratedOption(DatabaseGeneratedOption.None);
modelBuilder.Entity<User>()
.HasMany(u=>u.Roles)
.WithMany(u=>u.Users)
.Map(m =>
{
m.ToTable("UsersInRoles");
m.MapLeftKey("UserId");
m.MapRightKey("RoleId");
});
}
我添加了一些角色比如:admin,guest...
现在我要添加一个用户,他属于admin,
public ActionResult Create(string roleId)
var role=db.Role.SingleOrDefault(i=>i.RoleId==roleId);
User user=new User
{
UserId="abc",
UserName="小明"
}
//user.Roles.Add(role);//我这样子添加提示“未将对象引用到实例”
user.Roles=new List<Role>();
user.Roles.Add(role);//增加的时候提示“违反了 PRIMARY KEY 约束 'PK_Role'。不能在对象 'dbo.Role' 中插入重复键。\r\n语句已终止.”
db.User.Add(user);
db.SaveChange();
我要怎么做呢?如果要更新呢?
有没有人继续啊
额这里设置为key就不能重复插入了,那也太悲哀了吧?
m.ToTable("UsersInRoles");
m.MapLeftKey("UserId");
m.MapRightKey("RoleId");
建议你用EF4.3
public class User
{
public User
{
Roles = new List<Role>();
}
public int UserId { get; set; }
public string UserName { get; set; }
public List<Role> Roles { get; set; }
}
public class Role
{
public Role
{
Users = new List<User>();
}
public int RoleId { get; set; }
public string RoleName { get; set; }
public List<User> Users { get; set; }
}
public class DbEntities : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
}
添加角色/用户:
var role=new Role {RoleName="Test Role"};
db.Roles.Add(role);
db.SaveChange();
var role=db.Roles.Single(i=>i.RoleId==roleId);
User user=new User
{
UserName="小明"
};
user.Roles.Add(role);
db.Users.Add(user);
db.SaveChange();
不是我想要的答案
var role=db.Role.SingleOrDefault(i=>i.RoleId==roleId);
是否有數值呢?
有的值的。
@Xia.CJ: //user.Roles.Add(role);//我这样子添加提示“未将对象引用到实例”
是 提示哪個對象呢?
role不能定義,只能從db中 讀取。
var role=db.Role。where(m=>m.roleid==roleid) 用這個試一下
@無限遐想: var result = UHDEntities.SendWork.Where(m => m.SendWorkCode == SendWorkCode).FirstOrDefault();