如何在EF TPH Code First中阻止创建冗余FK约束

时间:2018-05-10 21:04:53

标签: entity-framework ef-code-first tph

我在一些项目中使用EF代码首先使用TPH(部分类) 我有这样的课:

namespace Billing.Model.Domain.Entities.BilProject
{

    [Table("ProjectPriceList")]
    public abstract class ProjectPriceList
    {
        [Key, Column("ProjectId", Order = 0)]
        public int ProjectId { get; set; }
        [Key, Column("PriceListId", Order = 1)] 
        public int PriceListId { get; set; }
        [Key, Column("PriceListSourceType", Order = 2)]
        public int PriceListSourceType { get; set; }
        [ForeignKey("PriceListSourceType")]
        public virtual BillingProjectCode PriceListSourceTypeCode { get; set; }
        public int AddUsrnm { get; set; }
        public DateTime AddTmstmp { get; set; }

        [ForeignKey("ProjectId")]
        public virtual BillingProject BillingProject { get; set; }
        public virtual SnapShotPriceList SnapShotPriceList{ get; set; }
    }

    public class BillingProjectPriceList : ProjectPriceList
    {
        [ForeignKey("PriceListId")]
        public virtual PriceList PriceList { get; set; }
    }
    public class EstimateProjectPriceList : ProjectPriceList
    {
    }
}

当我尝试生成sql代码来创建数据库时 从控制台更新数据库-Script 我收到这个SQL结果:

CREATE TABLE [dbo].[ProjectPriceList] (
    [ProjectId] [int] NOT NULL,
    [PriceListId] [int] NOT NULL,
    [PriceListSourceType] [int] NOT NULL,
    [AddUsrnm] [int] NOT NULL,
    [AddTmstmp] [datetime] NOT NULL,
    [Discriminator] [nvarchar](128) NOT NULL,
    CONSTRAINT [PK_dbo.ProjectPriceList] PRIMARY KEY ([ProjectId], [PriceListId], [PriceListSourceType])
)

CREATE INDEX [IX_ProjectId] ON [dbo].[ProjectPriceList]([ProjectId])
CREATE INDEX [IX_PriceListId] ON [dbo].[ProjectPriceList]([PriceListId])
CREATE INDEX [IX_PriceListSourceType] ON [dbo].[ProjectPriceList]([PriceListSourceType])

ALTER TABLE [dbo].[ProjectPriceList] ADD CONSTRAINT [FK_dbo.ProjectPriceList_dbo.BillingProject_ProjectId] FOREIGN KEY ([ProjectId]) REFERENCES [dbo].[BillingProject] ([ProjectId]) ON DELETE CASCADE
ALTER TABLE [dbo].[ProjectPriceList] ADD CONSTRAINT [FK_dbo.ProjectPriceList_dbo.BillingProjectCode_PriceListSourceType] FOREIGN KEY ([PriceListSourceType]) REFERENCES [dbo].[BillingProjectCode] ([CodeId]) ON DELETE CASCADE
ALTER TABLE [dbo].[ProjectPriceList] ADD CONSTRAINT [FK_dbo.ProjectPriceList_dbo.PriceList_PriceListId] FOREIGN KEY ([PriceListId]) REFERENCES [dbo].[PriceList] ([PriceListId]) ON DELETE CASCADE

最后一个FK约束是重复的,如果我尝试添加新的EstimateProjectPriceList,会让我遇到麻烦。 我的问题是 如何通过OnModelCreating中的一些代码数据注释或Fluent Api来停止创建此FK?

Thnx任何帮助..

0 个答案:

没有答案