首页 新闻 会员 周边

entity framework多对多插入/更新问题

1
悬赏园豆:60 [已解决问题] 解决于 2012-03-23 09:56

我采用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");
Xia.CJ的主页 Xia.CJ | 初学一级 | 园豆:16
提问于:2012-03-14 17:37
< >
分享
最佳答案
0

建议你用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();





 

收获园豆:30
jlzhou | 初学一级 |园豆:190 | 2012-03-14 22:52

不是我想要的答案

Xia.CJ | 园豆:16 (初学一级) | 2012-03-23 09:57
其他回答(1)
0
var role=db.Role.SingleOrDefault(i=>i.RoleId==roleId);
是否有數值呢?
收获园豆:30
無限遐想 | 园豆:3740 (老鸟四级) | 2012-03-15 09:02

有的值的。

支持(0) 反对(0) Xia.CJ | 园豆:16 (初学一级) | 2012-03-15 09:07

@Xia.CJ: //user.Roles.Add(role);//我这样子添加提示“未将对象引用到实例”

是 提示哪個對象呢?

role不能定義,只能從db中 讀取。

0
var role=db.Role。where(m=>m.roleid==roleid) 用這個試一下
支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-03-15 09:26

@無限遐想: var result = UHDEntities.SendWork.Where(m => m.SendWorkCode == SendWorkCode).FirstOrDefault();

支持(0) 反对(0) 無限遐想 | 园豆:3740 (老鸟四级) | 2012-03-15 09:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册