【发布时间】:2025-12-18 14:55:02
【问题描述】:
我正在尝试使用 Entity Framework 开发一个 ASP.net MVC 应用程序,在过去的大约 8 小时内,我试图修复一些问题,但没有成功。我有 3 个模型,Overhour、Accounting 和 Vacation。 Overhour 是父模型,一旦我们创建了Overhour,我们可以用它创建一个Accounting 或Vacation 记录一次。我们不需要创建一个,所以我们可以有一个Overhour 而没有Accounting 或Vacation。重要的是,当我们删除Overhour 时,我们应该同时删除Accountings 和Vacations(如果它们存在的话)。
我首先使用代码,我尝试使用 Data Annotations,但似乎你无法使用可选模型执行此操作,所以我现在使用 Fluent Api。这是我用于Overhour 和Accounting 之间关系的东西:
modelBuilder.Entity<Overhour>()
.HasOptional<Accounting>(s => s.Accounting)
.WithOptionalPrincipal()
.WillCascadeOnDelete(true);
即使我使用 CodeFirst,我也会使用插件来创建模型图以进行测试,并且模型看起来也不错(我猜):
Diagram(好像不能直接包含图片)
据我了解,它说“End1Delete 上的级联”。所以当我删除Overhour时,会计记录也应该被删除,但它不起作用,它只是将它设置为null。
另一件事是,我不确定哪个是父母。我的意思是,我应该有一个像这样的Overhour 模型:
class Overhour {
...
public int AccountingId { get; set; }
public virtual Accounting Accounting { get; set; }
}
或者是这样的:
class Overhour {
...
public virtual Accounting Accounting { get; set; }
}
或者也许我应该将此属性包含在会计模型中?像这样:
class Accounting {
...
public virtual Overhour Overhour { get; set; }
}
也许我需要两者都做?
我很困惑,有什么想法吗?
谢谢
【问题讨论】:
标签: c# asp.net asp.net-mvc entity-framework orm