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