我有一个表有3个外键到3个其他表,但是外键是复合的,复合外键的第一列是所有其他3个表的相同属性。所以我正在使用像这样的SQL架构....
------------------
PLANS
------------------
-EnterpriseID (PK, bigint)
-PlanID (PK, uniqueidentifier)
-CategoryID (FK, uniqueidentifier)
-StatusID (FK, uniqueidentifier)
-LeaderID (FK, uniqueidentifier)
------------------
STATUSES
------------------
-EnterpriseID (PK, bigint)
-StatusID (PK, uniqueidentifier)
-----------------
LEADERS
-----------------
-EnterpriseID (PK, bigint)
-LeaderID (PK, uniqueidentifier)
----------------
CATEGORIES
----------------
-EnterpriseID (PK, bigint)
-CategoryID (PK, uniqueidentifier)
因此,您可以看到每个表的主键是复合的。表Plans
还有一个复合外键到其他3个表中的每个表,其中EnterpriseID
是每个表的复合外键的第一列,以及相关的第2列追加。
我正在尝试使用数据注释在Entity Framework Code First中实现此功能,但我不确定如何表达EnterpriseID
中的Plans
属性是3 不同的外键。到目前为止,这是我的模型......
public class ActionPlan
{
[Key, Column(Order=0)]
[ForeignKey("Category")]
//[ForeignKey("Status")]
//[ForeignKey("Lead")]
public long EnterpriseID { get; set; }
[Key, Column(Order=1)]
public Guid PlanID { get; set; }
[ForeignKey("Category"), Column(Order=1)]
public Guid CategoryID { get; set; }
[ForeignKey("Status"), Column(Order=1)]
public Guid StatusID { get; set; }
[ForeignKey("Lead"), Column(Order=1)]
public Guid LeadID { get; set; }
// NAVIGATION PROPERTIES
public virtual Status Status { get; set; }
public virtual Category Category { get; set; }
public virtual Lead Lead { get; set; }
}
public class Status
{
[Column(Order=0), Key]
public long EnterpriseID { get; set; }
[Column(Order=1), Key]
public Guid StatusID { get; set; }
}
public class Lead
{
[Column(Order=0), Key]
public long EnterpriseID { get; set; }
[Column(Order=1), Key]
public Guid LeadID { get; set; }
}
public class ActionPlanCategory
{
[Column(Order=0), Key]
public long EnterpriseID { get; set; }
[Column(Order=1), Key]
public Guid CategoryID { get; set; }
}
您可以看到我尝试向Plan POCO EnterpriseID
属性添加多个外键属性,但这是不允许的。这有可能用属性来表达吗?或者我需要使用Fluent API吗?