gpt4 book ai didi

c# - 在 .Net Core/EF Core 中设置多个相同类的外键

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:58 24 4
gpt4 key购买 nike

我正在构建一个 .Net Core 网络应用程序,以将旧的遗留 Access ADP/ADE 前端替换为项目管理 SQL Server 数据库。然而,原始数据库的构建者并没有设置大量的外键关系,而是在 SQL View 中全部完成。我希望通过此应用程序解决的问题。

当外键属于同一类类型时,我想确保自己全神贯注地设置外键。例如,我有以下类(class)。

项目.cs

using System;
using System.Collections.Generic;

namespace ProjectLogic.Models
{
public class Project
{
public int Id { get; set; };
public string Name { get; set; }
public int? PmEmployeeId { get; set; }
public int? CadEmployeeId { get; set; }
public int? SalesRepEmployeeId { get; set; }
...
}
}

员工.cs

using System;
using System.Collections.Generic;

namespace ProjectLogic.Models
{
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public string Title { get; set; }
...
}
}

我在项目类末尾的键看起来像这样吗?

public Employee PmEmployee { get; set; }
public Employee CadEmployee { get; set; }
public Employee SalesRepEmployee { get; set; }

在Employee类中有相应的声明

public ICollection<Project> Projects { get; set; }

还有我的 DbContext 类中的模型生成器

modelBuilder.Entity<Project>(entity =>
{
// Fluent API for column properties
...
entity.HasOne(d => d.PmEmployee)
.WithMany(p => p.Projects)
.HasForeignKey(d => d.PmEmployeeId)
.OnDelete(DeleteBehavior.SetNull)
.HasConstraintName("FK_Project_Employee_PM");

entity.HasOne(d => d.CadEmployee)
.WithMany(p => p.Projects)
.HasForeignKey(d => d.CadEmployeeId)
.OnDelete(DeleteBehavior.SetNull)
.HasConstraintName("FK_Project_Employee_CAD");

entity.HasOne(d => d.SalesRepEmployee)
.WithMany(p => p.Projects)
.HasForeignKey(d => d.SalesRepEmployeeId)
.OnDelete(DeleteBehavior.SetNull)
.HasConstraintName("FK_Project_Employee_SALES");
});

我想我最大的担忧/问题是 Employee 类将如何处理与 Project 类的多重关系。我是否需要像 public ICollection<Project> PmProjects { get; set; } 一样单独处理它们? ?

最佳答案

是的,您需要有单独的项目集合。

在 Employee 中,您将拥有:

public ICollection<Project> PmProjects { get; set; }
public ICollection<Project> CadProjects { get; set; }
public ICollection<Project> SalesProjects { get; set; }

在 Project 中,您将:

public Employee PmEmployee { get; set; }
public Employee CadEmployee { get; set; }
public Employee SalesRepEmployee { get; set; }

构建器将是:

modelBuilder.Entity<Project>(entity =>
{
// Fluent API for column properties
...
entity.HasOne(d => d.PmEmployee)
.WithMany(p => p.PmProjects)
.HasForeignKey(d => d.PmEmployeeId)
.OnDelete(DeleteBehavior.SetNull)
.HasConstraintName("FK_Project_Employee_PM");

entity.HasOne(d => d.CadEmployee)
.WithMany(p => p.CadProjects)
.HasForeignKey(d => d.CadEmployeeId)
.OnDelete(DeleteBehavior.SetNull)
.HasConstraintName("FK_Project_Employee_CAD");

entity.HasOne(d => d.SalesRepEmployee)
.WithMany(p => p.SalesProjects)
.HasForeignKey(d => d.SalesRepEmployeeId)
.OnDelete(DeleteBehavior.SetNull)
.HasConstraintName("FK_Project_Employee_SALES");
});

关于c# - 在 .Net Core/EF Core 中设置多个相同类的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56846705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com