Jef*_*Cox 8 c# entity-framework asp.net-core
我正在构建一个 .Net Core Web 应用程序,以将旧的旧式 Access ADP/ADE 前端替换为项目管理 SQL Server 数据库。然而,原始数据库的构建者并没有设置大量的外键关系,而是为了在 SQL 视图中完成所有操作。我希望用这个应用程序来补救。
当外键属于相同的类类型时,我想确保我的头脑集中在设置外键上。例如,我有以下课程。
项目.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; }
...
}
}
Run Code Online (Sandbox Code Playgroud)
员工.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; }
...
}
}
Run Code Online (Sandbox Code Playgroud)
我在项目课程结束时的钥匙会像这样吗?
public Employee PmEmployee { get; set; }
public Employee CadEmployee { get; set; }
public Employee SalesRepEmployee { get; set; }
Run Code Online (Sandbox Code Playgroud)
在 Employee 类中有相应的声明
public ICollection<Project> Projects { get; set; }
Run Code Online (Sandbox Code Playgroud)
以及我的 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");
});
Run Code Online (Sandbox Code Playgroud)
我想我最大的担忧/问题是 Employee 类将如何处理与 Project 类的多种关系。我是否也需要单独处理这些public ICollection<Project> PmProjects { get; set; }
?
是的,您需要有单独的项目集合。
在员工中,您将拥有:
public ICollection<Project> PmProjects { get; set; }
public ICollection<Project> CadProjects { get; set; }
public ICollection<Project> SalesProjects { get; set; }
Run Code Online (Sandbox Code Playgroud)
在项目中,您将拥有:
public Employee PmEmployee { get; set; }
public Employee CadEmployee { get; set; }
public Employee SalesRepEmployee { get; set; }
Run Code Online (Sandbox Code Playgroud)
建造者将是:
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");
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4966 次 |
最近记录: |