gpt4 book ai didi

c# - EntityFramework Fluent API 创建没有导航属性的关系

转载 作者:太空狗 更新时间:2023-10-30 01:05:00 25 4
gpt4 key购买 nike

有没有办法只使用 Id 在两个类之间建立关系?
在这个例子中,我试图在 CompanyEmployee 之间创建一个一对多关系(一个 Company 有很多 Employee)

这是我的代码:

public class Company
{
public Guid Id { get; set; }
public string CompanyName { get; set; }

}

public class Employee
{
public Guid Id { get; set; }
public string Name { get; set; }

public Guid CompanyId { get; set; }
}

使用 Fluent API 我可以创建关系,只要我创建一个导航属性。我正在寻找一种方法,通过 Company.IdEmployee.CompanyId 将这两个类关联起来,而无需任何导航属性。

提前致谢。

最佳答案

我能看到至少接近“没有导航属性的关系”的唯一方法是通过手写迁移在数据库中创建 FK 约束,如下所示:

using System;
using System.Data.Entity.Migrations;

public partial class CreateCompanyAndEmployee : DbMigration
{
public override void Up()
{
CreateTable(
"Companies",
c => new
{
Id = c.Guid(nullable: false),
CompanyName = c.String(nullable: false, maxLength: 100)
})
.PrimaryKey(t => t.Id);

CreateTable(
"Employees",
c => new
{
Id = c.Guid(nullable: false),
Name = c.String(nullable: false, maxLength: 100),
CompanyId = c.Guid(nullable: false)
})
.PrimaryKey(t => t.Id);

AddForeignKey("Employees", "CompanyId", "Companies", "Id");
CreateIndex("Employees", "CompanyId");
}

//...
}

由于您没有导航属性,因此如果您想要加载例如包含所有相关员工的公司,则必须使用 LINQ-to-Entities 连接,例如:

var companiesWithEmployees = context.Companies
.GroupJoin(context.Employees,
company => company.Id,
employee => employee.CompanyId,
(company, employees) => new
{
Company = company,
Employees = employees
})
.ToList();

您始终必须指定属性 employee.CompanyId明确表示此类连接中的外键。 EF 不知道 CompanyId是一个外键属性。它只是EF模型中的一个普通的标量属性,没有任何关系意义。

companiesWithEmployees将是匿名对象的集合。每个对象都包含一个 Company实体和集合 IEnumerable<Employee>与该公司有关的员工。

但是,我看不到避免导航属性的好处。

关于c# - EntityFramework Fluent API 创建没有导航属性的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20525827/

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