我有 3 个实体:
public class AspNetUser
{
public string Id {get; set;}
}
public class Event
{
public int Id {get; set;}
}
public class UserEvent
{
[Column(Order=0), Key, ForeignKey("AspNetUsers")]
public string UserId { get; set; }
[Column(Order=1), Key, ForeignKey("Events")]
public int EventId { get; set; }
public DateTime EnrolTime { get; set; }
public virtual AspNetUser User { get; set; }
public virtual Event Event { get; set; }
}
正如您所看到的,UserEvent 只是一个关系表,其中包含来自 2 个表的 UserId 和 EventId。
我的问题是:
- 注释是否足以告诉 EF 创建 2 个外键?或者我还必须使用 Fluent API 在 DbContext 类中的 OnModelCreating() 方法 中执行此操作?或者我必须创建一个配置类才能这样做? 我在这篇文章中看到了一些内容(这让我很困惑):
Entity Framework Multiple Column as Primary Key by Fluent Api
- 外键(“X”) 我想 X 应该是表名称而不是实体名称,对吗? 例如。 X 应该是 AspNetUsers(在数据库中),而不是作为实体名称的 AspNetUser。
谢谢。
最佳答案
是的,使用数据注释就足够了,但问题是你需要在 ForeignKey
中指定attribute 导航属性的名称,表示其作为外键的关系:
public class UserEvent
{
[ Key,Column(Order=0), ForeignKey("User")]
public string UserId { get; set; }
[ Key,Column(Order=1), ForeignKey("Event")]
public int EventId { get; set; }
public DateTime EnrolTime { get; set; }
public virtual AspNetUser User { get; set; }
public virtual Event Event { get; set; }
}
或者,您可以将 ForeignKey
注释应用于导航属性,并告诉它哪个属性是关系的外键:
public class UserEvent
{
[Key,Column(Order=0)]
public string UserId { get; set; }
[Key,Column(Order=1)]
public int EventId { get; set; }
public DateTime EnrolTime { get; set; }
[ForeignKey("UserId")]
public virtual AspNetUser User { get; set; }
[ForeignKey("EventId")]
public virtual Event Event { get; set; }
}
关于c# - EF6,Composite Key,注释够了吗?或者我还必须使用 Fluent API 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30949623/