2013-06-13 60 views
0

从我在网上看到的例子以及在编程实体框架CodeFirst书中,当您在两个类上都有一个集合时,EF会创建一个具有两个主键的映射表。 但是,我怎么能添加一些额外的领域到这张桌子?例如,我有以下实体和上下文Howto配置Code First Entity Framework多对多映射表?

public class User 
{ 
    [Key] 
    public Guid Id { get; set; } 
    public String Name { get; set; } 
    public virtual ICollection<Role> Roles { get; set; } 
} 

public class Role 
{ 
    [Key] 
    public Guid Id { get; set; } 
    public String Name { get; set; } 
    public virtual ICollection<User> Users { get; set; } 
} 

class MyContext : DbContext 
{ 
    public MyContext (string connString) 
     : base(connString) 
    { 
    } 

    public DbSet<User> Users { get; set; } 
    public DbSet<Role> Roles { get; set; } 
} 

访问此背景下将产生具有3个表创建数据库:用户,角色和的UserRole - 许多一对多映射表有两个GUID字段。

我想添加一些额外的字段到这个表 - 日期时间AssignmentDate。 如果我添加新的实体

public class UserRoles 
{ 
    [Key] 
    public Guid User_Id { get; set; } 
    [Key] 
    public Guid Role_Id { get; set; } 
    public DateTime AssignmentDate { get; set; } 
} 

class MyContext : DbContext 
{ 
    public MyContext (string connString) 
     : base(connString) 
    { 
    } 

    public DbSet<User> Users { get; set; } 
    public DbSet<Role> Roles { get; set; } 
    public DbSet<UserRoles> UserRoles { get; set; } 
} 

结果是在数据库中添加一个附加表。 但我想修改自动创建的表。 我该怎么做?

Thx。

回答

0

必须使用单独的类UserRoles,但在UserRole类中将关系更改为使用IList<UserRole>而不是直接引用另一个类。

您不能配置默认的多对多表,因为它总是只有两个主键列自动生成。

+0

Thx。它为我工作 – bairog

相关问题