Как заблокировать создание избыточного ограничения FK в EF TPH Code First - PullRequest
0 голосов
/ 11 мая 2018

Я использую в некоторых проектах код 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-код для создания базы данных с помощью Update-Database-Сценарий с консоли Я получаю этот 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.Мой вопрос: Как остановить создание этого FK с помощью некоторого кода Аннотации данных или Fluent Api в OnModelCreating?

Thnx для любой помощи ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...