首页 > 解决方案 > Fluent API 一对多对一关系

问题描述

我正在尝试与 Fluent API 实现一对或多对一的关系,但目前没有成功。尤其是在暂时不起作用的删除级联上。

需要在EventLocation这两个类之间实现关系。一个事件至少有一个位置,另一方面,一个位置可以归因于不同的事件。

编辑:一个事件有一个确切的位置而不是“至少一个”。非常遗憾。

当我删除一个事件并且没有更多使用相关位置的事件时,也需要删除该位置。只要位置被事件使用,位置仍然需要被存储,因为它是事件所必需的。

这是我的代码:

流畅的 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; }

标签: c#apientityfluentrelationships

解决方案


您需要修改您的位置类和模型构建器,如下所示。为什么使用 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();

推荐阅读