【问题标题】:Fluent API One-Or-Many to One realtionshipFluent API 一对一关系
【发布时间】:2019-01-04 19:12:24
【问题描述】:

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

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

编辑:一个事件有一个确切的位置而不是“至少一个”。对此感到抱歉。

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

这是我的代码:

Fluent 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# api entity fluent relationships


【解决方案1】:

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

【讨论】:

  • 感谢您的评论。 HasMany 在我身边不起作用。 E.events 不在 Event 类中,我的代码要求 Event 中的参数。我也犯了一个小错误,一个事件需要有一个确切的位置,而不是像我提到的那样“至少一个”。对此感到抱歉。
  • 点击此链接了解如何使用 CascadeOnDelete() 实现流畅的 API,一直到底部。 entityframeworktutorial.net/code-first/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 2013-01-26
相关资源
最近更新 更多