c# - Fluent API 一对多对一关系
问题描述
我正在尝试与 Fluent API 实现一对或多对一的关系,但目前没有成功。尤其是在暂时不起作用的删除级联上。
需要在Event和Location这两个类之间实现关系。一个事件至少有一个位置,另一方面,一个位置可以归因于不同的事件。
编辑:一个事件有一个确切的位置而不是“至少一个”。非常遗憾。
当我删除一个事件并且没有更多使用相关位置的事件时,也需要删除该位置。只要位置被事件使用,位置仍然需要被存储,因为它是事件所必需的。
这是我的代码:
流畅的 API
modelBuilder.Entity<Event>()
.HasRequired<Location>(c => c.Location)
.WithMany();
.WillCascadeOnDelete();
班级活动
[Key]
public Guid EventID { get; set; } = Guid.NewGuid();
public string Description { get; set; }
public Location Location { get; set; }
上课地点
[Key]
public Guid LocationID { get; set; } = Guid.NewGuid();
public string Description { get; set; }
解决方案
您需要修改您的位置类和模型构建器,如下所示。为什么使用 Fluent API 在您的课程中使用 DataAnnotation。将所有内容保留在 fluent API 中会更干净。
[Key]
public Guid LocationID { get; set; } = Guid.NewGuid();
public string Description { get; set; }
public ICollection<Event> Events {get; set;}
modelBuilder.Entity<Event>()
.HashMany<Location>(e = > e.Events)
.WithRequired(l => l.Location)
.WillCascadeOnDelete();
推荐阅读
- python - pyjwt[crypto] 2.0.0 更新与 django-allauth 不兼容
- java - Java 以编程方式从 .class 文件中列出引用的类
- node.js - 对于格式错误的 json 响应,我应该发送什么 http 状态?
- scala - 在从 MongoDB 加载大量数据以触发数据帧时,获取“查询超过了 40 MB 的最大允许内存使用量”
- laravel - 如何从 laravel 的节点模块导入库
- php - 如何为此 SQL Server 连接应用程序安装正确的 PHP ODBC 驱动程序
- flutter - 如何配置 VS Code 以在 URL 中使用查询参数启动 Flutter Web 应用程序?
- python - Python,第一个列表索引 - 前一个列表索引然后打印
- javascript - 函数可以包装一个类并知道何时调用最后一个方法吗?
- c# - 根据值更改 WPF DataGrid 列上的图像