2017-07-11 33 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加载你的数据,

    相关问题