多个表的复合主键映射到单个实体框架POCO属性

时间:2014-01-22 21:34:39

标签: c# asp.net sql asp.net-mvc entity-framework

我有一个表有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吗?

0 个答案:

没有答案