2013-12-11 58 views
4

有沒有一種方法可以僅使用來創建兩個類之間的關係
在這個例子中,我試圖創造一個1對許多關係和Employee之間Company(一Company有很多EmployeeEntityFramework Fluent API在沒有導航屬性的情況下創建關係

這裏是我的代碼:

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; } 
} 

使用流利的API我能夠創建關係,只要我創建一個導航屬性。我正在尋找一種方法,將Company.IdEmployee.CompanyId這兩個類關聯起來,而沒有任何導航屬性。

在此先感謝。

+0

如果您沒有導航屬性,您希望如何在代碼中使用它們?或者你只是想讓EF爲你創建外鍵約束? – nemesv

回答

5

我可以看到可能接近至少一個「沒有導航性質的關係」是開創了一個手寫的遷移數據庫中的FK contraint,像這樣的唯一方法:

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到實體加盟,如果你想加載如公司在內的所有相關員工,像這樣的例子:

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>

但是,我沒有看到避免導航屬性的好處。

相關問題