EF - 一对一可选关系+ SQL Server级联

时间:2013-06-10 11:58:04

标签: sql-server entity-framework one-to-one

在SQLServer上:

表:FinanceiroLancamento

标识 名称 IdFinanceiroLancamentoCaixa IdFinanceiroLancamentoBanco

表:FinanceiroLancamentoCaixa

标识 钱

在EF上 - “FinanceiroLancamento”的代码优先:

        Property(p => p.Name)
            .IsRequired();

        HasOptional(p => p.FinanceiroLancamentoCaixa)
            .WithMany()
            .HasForeignKey(p => p.IdFinanceiroLancamentoCaixa);

在EF上 - “FinanceiroLancamentoCaixa”的代码优先:

        Property(p => p.Money)
            .HasPrecision(15, 2)
            .IsRequired();

我的SQLServer关系:

ALTER TABLE FinanceiroLancamento ADD CONSTRAINT [FinanceiroLancamento_003_FKEY] FOREIGN KEY([IdFinanceiroLancamentoCaixa])参考文献FinanceiroLancamentoCaixa([Id])ON DELETE CASCADE ON UPDATE CASCADE;

所以在我可以做的源代码中:

var money = financeiroLancamento.FinanceiroLancamentoCaixa.Money:

我的关系中的问题是,当我删除“FinanceiroLancamento”时,它不会删除“FinanceiroLancamentoCaixa”。但如果我删除“FinanceiroLancamentoCaixa”,则删除“FinanceiroLancamento”。

我想要相反,我想删除“FinanceiroLancamento”并删除“FinanceiroLancamentoCaixa”。我该怎么办?

(我想继续使用EF导航从FinanceiroLancamento到FinanceiroLancamentoCaixa)

感谢。

致以最诚挚的问候,

Wilton Ruffato Wonrath

1 个答案:

答案 0 :(得分:0)

这个名字非常奇怪。我不太适合EF,但我认为你想要每个FinanceiroLancamento记录的许多(或零或一个)FinanceiroLancamentoCaixa记录。在SQL中执行此操作的常规方法是在两个表中都有一个Id列,以及FinanceiroLancamentoCaixa表中的“IdFinanceiroLancamento”列。

然后您将外键定义为

ALTER TABLE FinanceiroLancamentoCaixa
ADD CONSTRAINT FK_FinanceiroLancamentoCaixa_FinanceiroLancamento
FOREIGN KEY (IdFinanceiroLancamento) 
REFERENCES FinanceiroLancamento(Id) 
ON DELETE CASCADE
ON UPDATE CASCADE;

然后,当您删除FinanceiroLancamento记录时,级联也会删除FinanceiroLancamentoCaixa记录。