如何映射实体框架CTP5中的多对多关系? [英] How to map many-to-many relationships in Entity Framework CTP5?

查看:152
本文介绍了如何映射实体框架CTP5中的多对多关系?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用3个表(用户 - 接口表 - 语言)来映射2种类型(用户 - >语言),并且看起来像是modelBuilder正在期望这两种类型之间有一个引用(如user.languagesSpoken ,和language.UsersSpeaking)。所以基本上我可以建立一个像

modelBuilder.Entity< User>()。HasMany(x => x.LanguagesSpoken).WithMany(x => x.UsersSpeaking )

然而,我不需要从语言到用户的引用,并且无法弄清楚如何映射。

还有一种方法来指定一个连接表名称?



谢谢!

解决方案

做窍门:

  public class User 
{
public int UserId {get;组; }
public virtual ICollection< Language> LanguagesSpoken {get;组; }
}

public class语言
{
public int LanguageId {get;组; }
public int Name {get;组; }
}

public class上下文:DbContext
{
public DbSet< User>产品{get;组; }
public DbSet< Language>语言{get;组;

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity< User>()
.HasMany(x => x.LanguagesSpoken)
.WithMany()
.Map(c =>
{
c.ToTable(yourDesiredName);
});
}
}


I'm trying to map 2 types (user -> languages) using 3 tables (user - junction table - languages), and looks like the modelBuilder is expecting both types to have a reference to each other (like user.languagesSpoken, and language.UsersSpeaking). So basically I can build something like
modelBuilder.Entity<User>().HasMany(x=>x.LanguagesSpoken).WithMany(x=>x.UsersSpeaking).
I don't need a reference from language to user, however - and can't figure out how to map that..
Also, is there a way to specify a junction table name ?

Thanks!

解决方案

The following will do the trick:

public class User
{
    public int UserId { get; set; }
    public virtual ICollection<Language> LanguagesSpoken { get; set; }
}

public class Language
{
    public int LanguageId { get; set; }
    public int Name { get; set; }
}        

public class Context : DbContext
{
    public DbSet<User> Products { get; set; }
    public DbSet<Language> Languages { get; set; }        

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>()
                    .HasMany(x => x.LanguagesSpoken)
                    .WithMany()
                    .Map(c => 
                    { 
                        c.ToTable("yourDesiredName"); 
                    });
    }
}    

这篇关于如何映射实体框架CTP5中的多对多关系?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆