c# - 如何在 Entity Framework 中设置两个一对多关系?

标签 c# database entity-framework ef-code-first

假设我们正在使用 Entity Framework 代码优先方法,并且我们有两个对象,它们通过两个一对多关系链接(一个 Person 可以拥有多个 Car ,但每辆车都有一个车主和一个“主要司机”)。这是两个实体:

public class Person {
    #region Persisted fields
    [Required]
    public int PersonId { get; set; }
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string Surname { get; set; }
    #endregion

    #region Navigation properties
    public virtual ICollection<Car> CarsOwned { get; set; }
    #endregion
}

public class Car {
    #region Persisted fields
    [Required]
    public int CarId { get; set; }
    [Required]
    public string Make { get; set; }
    [Required]
    public string Manufacturer { get; set; }
    [Required]
    public string RegNo { get; set; }
    [Required]
    [ForeignKey("Owner")]
    public int OwnerId { get; set; }
    [Required]
    [ForeignKey("MainDriver")]
    public int MainDriverId { get; set; }
    #endregion

    #region Navigation properties
    public virtual Person Owner { get; set; }
    public virtual Person MainDriver { get; set; }
    #endregion
}

我如何告诉 Entity Framework 应该使用两个外键(OwnerIdMainDriverId)中的哪一个来确定 CarsOwned 集合?我只是尝试用这两个实体自动创建一个数据库,它假设我出于某种原因想使用 MainDriverId 作为 CarsOwned 外键,而显然我想使用 OwnerId 外键。

最佳答案

我怀疑您必须使用流畅的配置来进行设置。

public class YourContext : DbContext
{
   ...
   protected override OnModelCreating(DbModelBuilder modelBuilder)
   {
      modelBuilder.Entity<Car>()
         .HasRequired(c => c.Owner)
         .WithMany(p => p.CarsOwned)
         .HasForeignKey(c => c.OwnerId)
         .WillCascadeOnDelete(false);
          // Otherwise you might get a "cascade causes cycles" error

      modelBuilder.Entity<Car>()
         .HasRequired(c => c.MainDriver)
         .WithMany() // No reverse navigation property
         .HasForeignKey(c => c.MainDriverId)
         .WillCascadeOnDelete(false);
   }
}

关于c# - 如何在 Entity Framework 中设置两个一对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13311461/

相关文章:

c# - EF6 Code First 和通过注释映射,如何构建配置?

c# - 在 Xamarin Forms 中的选取器项上应用样式

c# - 当我启动项目时,图像未加载

c# - 在 con.Open() 之前测试数据库连接是否正常

database - 在 presto、hive 中查询数组结构

c# - MVC设计模式,服务层的目的?

asp.net-mvc - 带有asp.net mvc 4和EntityFramework的ViewModels的重点是什么

c# - EntityFramework 6.1.1 与 Linq 性能问题

c# - 哪个速成版用于 C# 中的 ASP.NET Web 应用程序?

mysql - 条件为 If (Update OR Insert) 的 SQL 查询?