实体框架 - 在InverseProperty上命名“自动生成”表

时间:2013-01-03 08:43:48

标签: entity-framework entity-relationship

我做了一些搜索,但找不到相同的问题/问题。 当EF创建遇到InverseProperty DataAnnotation的表时,我对表命名(在数据库中)有疑问

“虚拟/演示代码”:

public class User
{
    public Guid Id { get; set; }
    public String Name { get; set; }

    public virtual List<Event> InvitedEvents { get; set;}
    public virtual List<Event> AcceptedEvents { get; set;}
    public virtual List<Event> DeclinedEvents { get; set;}
}

public class Event
{
    public String Name { get; set;}

   [InverseProperty("InvitedEvents")]
   public virtual List<User> InvitedUsers { get; set; }
   [InverseProperty("AcceptedEvents")]
   public virtual List<User> AcceptedUsers { get; set; }
   [InverseProperty("DeclinedEvents")]
   public virtual List<User> DeclinedUsers { get; set; }

}

这一切都有效,查找表已创建,但我的问题是 如何为该表提供名称?

他们现在被命名(类似)   - EventUser   - EventUser_1   - EventUser_2

我想给它一些更“可读”的名字。

希望很清楚。

更新<!/强>

正如Ladislav Mrnka所述,流畅的API就是解决方案。我删除了[InverseProperty]属性,并将关系的创建添加到DataContext类。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Event>()
        .HasMany(e => e.InvitedEvents )
        .WithMany(u => u.InvitedUsers )
        .Map(mc =>
            {
                mc.ToTable("%TABLENAME%");
                mc.MapLeftKey("UniqueId");
                mc.MapRightKey("UniqueId");
             });
}

您需要确保每个类都包含一个UniqueId列(在我的演示示例中为EventId,UserId)

1 个答案:

答案 0 :(得分:0)

答案也在答案中更新

正如Ladislav Mrnka所说,流畅的API是解决方案。我删除了[InverseProperty]属性,并将关系的创建添加到DataContext类。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Event>()
        .HasMany(e => e.InvitedEvents )
        .WithMany(u => u.InvitedUsers )
        .Map(mc =>
            {
                mc.ToTable("%TABLENAME%");
                mc.MapLeftKey("UniqueId");
                mc.MapRightKey("UniqueId");
             });
}