首页 新闻 会员 周边

Entity Framework 多对多 添加时会新增加一条数据?不知道是什么原因?

0
悬赏园豆:10 [已解决问题] 解决于 2013-09-29 17:15
public class Role
{
    public Guid ID{get;set;}
    public string Name{get;set;}
    public string Description{get;set;}
   public ICollection<Menu> Menu { get; set; }
}
public class Menu
{
     public Guid ID{get;set;}
    public string Name{get;set;}
    public string Description{get;set;}
   public ICollection<Role> Role { get; set; }
}

public RoleTypeConfiguration()
        {
            HasKey<Guid>(c => c.ID);
            Property(c => c.ID)
                .IsRequired()
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
            Property(c => c.Name)
                .IsRequired()
                .HasMaxLength(25);
            HasMany<Menu>(c=>c.Menu)
                .WithMany(c=>c.Role)
                .Map(c=>{
                    c.MapLeftKey("RoleID");
                    c.MapRightKey("MenuID");
                    c.ToTable("Role_Menu");
                });
        }

添加角色时会在Menu表中新加一条数,这是为什么呢?
Role model = new Role()
model.Name = "超级管理员";
            model.Description = "超级管理员";
            Menu mm = new Menu(){ID=new Guid("BF9D5EC9-EE7F-4786-A5E0-9AAB90ADB73D")};
            model.Menu = new List<Menu> { mm };
            userService.CreateRoles(model);
添加角色时会在Menu表中新加一条数,这是为什么呢?

其实我的问题和http://q.cnblogs.com/q/51646/这个是一样的,但就不知道怎么解决?
浪潮之巅的主页 浪潮之巅 | 初学一级 | 园豆:83
提问于:2013-09-17 20:48
< >
分享
最佳答案
0

试试将

model.Menu = new List<Menu> { mm };

改为

model.Menu = null;
收获园豆:5
dudu | 高人七级 |园豆:30994 | 2013-09-18 14:01
Role role = new Role();
            role.ID = Guid.NewGuid();
            role.Name = "超级管理员";
            
            using (var context = new KingDbContext()) {
                role.Menu.Add(context.Menu.Where(c => c.ID == new Guid("BE5A0FD5-1EAE-4A95-AF34-DA4977F985F8")).First());
                context.Roles.Add(role);
                context.SaveChanges();
            }

像上面的写法就没问题,等于是说每次添加的时候都要先去菜单表中取出来。这样做很麻烦。

浪潮之巅 | 园豆:83 (初学一级) | 2013-09-18 15:13

@浪潮之巅: 你要站在EF的角度考虑,你不告诉它,它怎么知道数据库中已经有了对应的Menu。

dudu | 园豆:30994 (高人七级) | 2013-09-18 15:22

@dudu: 可能是习惯了Nhibernate,第一次尝试用很不习惯。我不知道别人觉得EF的这个好不好,但我觉得有点麻烦,我看网上有人的自己生成一张中间表,而不用EF的多表关联了。

浪潮之巅 | 园豆:83 (初学一级) | 2013-09-21 10:31
其他回答(3)
0

很显明,你添加了一个Menu进去……

sinhbv | 园豆:2579 (老鸟四级) | 2013-09-18 09:15
0

因为你在Role和Menu之间建立了外键关系,所以你在添加Role的时候,同时也添加了相应的Menu,EntityFramework在处理这种关系的时候,就会把对应的Menu也会添加进去。如果不想添加Menu数据,分开添加就好了。

 

收获园豆:5
kaleyroy | 园豆:360 (菜鸟二级) | 2013-09-18 12:08
0

继续反EF,开发效率不是最好,性能很差,易用性(很多坑需要注意)跨数据库不易.

http://www.cnblogs.com/humble/p/3320804.html

迅捷网络[来送福利] | 园豆:576 (小虾三级) | 2013-09-20 18:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册