Entity framework 实体框架-命名为;“自动生成”;逆属性表

Entity framework 实体框架-命名为;“自动生成”;逆属性表,entity-framework,entity-relationship,Entity Framework,Entity Relationship,我做了一些搜索,但找不到相同的问题。 当EF创建一个遇到InverseProperty DataAnnotation的表时,我有一个关于表命名(在数据库中)的问题 “虚拟/演示代码”: 公共类用户 { 公共Guid Id{get;set;} 公共字符串名称{get;set;} 公共虚拟列表被邀请者{get;set;} 公共虚拟列表接受事件{get;set;} 公共虚拟列表DeclinedEvents{get;set;} } 公开课活动 { 公共字符串名称{get;set;} [反向属性(“被邀请

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

“虚拟/演示代码”:

公共类用户
{
公共Guid Id{get;set;}
公共字符串名称{get;set;}
公共虚拟列表被邀请者{get;set;}
公共虚拟列表接受事件{get;set;}
公共虚拟列表DeclinedEvents{get;set;}
}
公开课活动
{
公共字符串名称{get;set;}
[反向属性(“被邀请者”)]
公共虚拟列表受邀者{get;set;}
[反向属性(“接受事件”)]
公共虚拟列表接受用户{get;set;}
[反向属性(“DeclinedEvents”)]
公共虚拟列表DeclinedUsers{get;set;}
}
这一切都起作用了,并且创建了查找表,但我的问题是 如何为该表命名?

它们现在被命名为(类似于) -事件用户 -事件用户_1 -事件用户2

我想给它起一些更“易读”的名字

希望一切都清楚

更新

正如所回答的,fluentapi就是解决方案。我删除了[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");
             });
}
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");
             });
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(e=>e.InvitedEvents)
.有许多(u=>u.D用户)
.Map(mc=>
{
mc.ToTable(“%TABLENAME%”);
mc.MapLeftKey(“唯一标识”);
mc.MapRightKey(“唯一标识”);
});
}

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

答案也在answer中更新

正如Ladislav Mrnka所回答的,fluent 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");
             });
}
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");
             });
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(e=>e.InvitedEvents)
.有许多(u=>u.D用户)
.Map(mc=>
{
mc.ToTable(“%TABLENAME%”);
mc.MapLeftKey(“唯一标识”);
mc.MapRightKey(“唯一标识”);
});
}

只有使用fluent API才能做到这一点。多亏了这一点,我自己也没有找到答案。我删除了DataAnnotation属性,并在DataContext中添加了Fluent API,工作很有魅力,感谢Againto sad,使用DataAnnotation是不可能的!您好,您介意将您的更新移动到一个答案并将其标记为已接受吗?我想将另一个问题标记为这一问题的副本,但只有答案被接受的问题才有资格。