EF Code First:多对多和一对多

Tim*_*ely 6 database fluent-interface relationships ef-code-first entity-framework-4.1

这可能只是因为我对EF Code First流畅API的了解不足,但我很难过.

我想模拟以下内容:

  • 集合与标识和名称
  • 一个用户收集与标识和名称
  • 每个用户只分配一个主要组
  • 每个用户可能有零个或多个次要组

我想要的表格结构如下:

  • ID
  • 名称

用户

  • ID
  • 名称
  • PrimaryGroupId

SecondaryGroupAssignments

  • 用户身份
  • GroupId的

我一直在试图用EF Code First模拟这个问题,但我无法接受用户和组之间的关系.很抱歉没有发布任何.NET代码(我很高兴),但无论如何它可能都是错的.

有没有办法制作EF模型呢?我假设我必须使用Fluent API进行某种配置.也许更好的问题是:Fluent API是否有任何好的,明确的参考?

谢谢!

Lad*_*nka 16

试试这个(未经测试):

public class Group 
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<User> PrimaryUsers { get; set; }
    public virtual ICollection<User> SecondaryUsers { get; set; } 
}

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int PrimaryGroupId { get; set; }

    public virtual Group PrimaryGroup { get; set; }
    public virtual ICollection<Group> SecondaryGroups { get; set; }
}

public class Context : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Group> Groups { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<User>()
                    .HasRequired(u => u.PrimaryGroup)
                    .WithMany(g => g.PrimaryUsers)
                    .HasForeignKey(u => u.PrimaryGroupId)
                    .WillCascadeOnDelete(false);

        modelBuilder.Entity<User>()
                    .HasMany(u => u.SecondaryGroups)
                    .WithMany(g => g.SecondaryUsers)
                    .Map(m => m.MapLeftKey("UserId")
                               .MapRightKey("GroupId")
                               .ToTable("SecondaryGroupAssignments"));
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我可以这么说,Ladislav,这是我有幸遇到过/使用来解决我确切问题的最有用的帖子之一!谢谢! (3认同)