2017-07-11 38 views
0

我有(無法更改)EF DataBase第一個項目,沒有模型中的導航屬性。EntityFramework 6 DatabaseFirst從代碼中添加導航屬性

我想延長自動生成的模型和添加導航屬性

  1. 生成的模型
//generated.cs 

public partial class company 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
} 

public partial class user 
{ 
    public int id { get; set; } 
    public int company_id { get; set; } 
} 
  • 我想從代碼添加導航屬性
  • //model_extension.cs 
    
    public partial class user 
    { 
        public company Company { get; set; } 
    } 
    

    我有例外情況「指定的類型成員'公司'在LINQ to Entities中不受支持。只有初始化,實體成員和實體導航屬性都支持。」

    我CodeFirst工作之前。

    我明白,我必須鏈接到user.company_id公司 但不知道如何使用代碼使這個(不設計師)

    +0

    你需要的聲音'ICollection':'公共ICollection Company {get;組; }'。您不能直接將模型類定義爲導航屬性,而無需先將其包裝到受支持的集合中。 –

    +0

    我需要公司。使用公司獲取所有用戶 - db.users.Include(x => x.Company).ToList()。但我不想改變.edmx –

    +0

    你應該在你的表中有外鍵。 DbFirst將在生成模型時自動創建導航屬性。 – Aby

    回答

    1

    在數據庫第一方法中,您通過Entity Framework Designer/ADO.NET Entity Data Model從數據庫模式生成POCO對象,因此它不像Code-First那樣靈活,您需要繼續數據庫並自行更改模式並更新.edmx文件。雖然可以在c#端爲這些模型添加屬性,但它們不會添加到數據庫sch中ema,

    我建議你反轉你的數據庫模式,並作爲代碼優先的方法,這nuget package可以爲你做這個。

    倒車這是所有關於代碼優先然後,創建自己的後DbContextOnModelCreating,讓遷移處理其餘部分。然後你可以使用Eager加載EF加載你的數據,

    相關問題