0

我做了一些搜索,但找不到相同的问题/问题。当 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 中)

4

1 回答 1

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");
             });
}
于 2015-06-24T10:12:47.540 回答