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