Tic*_*ico 4 c# entity-framework
有没有办法只使用ID创建两个类之间的关系?
在这个例子中,我试图在和之间建立一对多的关系(一个有很多)CompanyEmployeeCompanyEmployee
这是我的代码:
public class Company
{
public Guid Id { get; set; }
public string CompanyName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和
public class Employee
{
public Guid Id { get; set; }
public string Name { get; set; }
public Guid CompanyId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
使用Fluent API我可以创建关系,只要我创建一个导航属性.我正在寻找一种方法来通过Company.Id和Employee.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");
}
//...
}
Run Code Online (Sandbox Code Playgroud)
由于您没有导航属性,因此如果您想要加载例如包括所有相关员工的公司,则必须使用LINQ-to-Entities的连接,例如:
var companiesWithEmployees = context.Companies
.GroupJoin(context.Employees,
company => company.Id,
employee => employee.CompanyId,
(company, employees) => new
{
Company = company,
Employees = employees
})
.ToList();
Run Code Online (Sandbox Code Playgroud)
您始终必须明确指定employee.CompanyId表示此类连接中的外键的属性.EF不知道这CompanyId是一个外键属性.它只是EF模型中的普通标量属性,没有任何关系含义.
companiesWithEmployees将是匿名对象的集合.每个对象都包含一个Company实体以及IEnumerable<Employee>与该公司相关的员工集合.
但是,我没有看到避免导航属性的好处.
| 归档时间: |
|
| 查看次数: |
1303 次 |
| 最近记录: |