Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 4 首先使用DataAnnotation与EntityFramework代码的关系_Entity Framework 4_Data Annotations_Code First - Fatal编程技术网

Entity framework 4 首先使用DataAnnotation与EntityFramework代码的关系

Entity framework 4 首先使用DataAnnotation与EntityFramework代码的关系,entity-framework-4,data-annotations,code-first,Entity Framework 4,Data Annotations,Code First,我有三个表,它们之间有以下关系: Account { public int Id; } Job { public int Id; public int AccountId; } Practice { public int Id; public int AccountId; public string Name; } 我希望能够通过作业对象访问Practice对象,如下所示: Job.Account.Practice.Name 数据库结构是预先存在的,因

我有三个表,它们之间有以下关系:

Account {
   public int Id;
}

Job {
   public int Id;
   public int AccountId;
}

Practice {
   public int Id;
   public int AccountId;
   public string Name;
}
我希望能够通过作业对象访问Practice对象,如下所示:

Job.Account.Practice.Name
数据库结构是预先存在的,因此不能对其进行更改。我想让英孚提供这种关系,我相信它可以。我确实通过在Account类上放置ICollection导航属性来练习,并使用ForeignKey在Practice类上注释Account导航属性来实现了它,但必须有一种不使用集合的方法

因此,问题是,我应该尝试使用哪些数据注释属性来获得所需的结果?

Description 您不需要DataAnnotation属性就可以做到这一点。在Codefirst中,您可以执行以下操作。实体框架将生成您为您描述的表

样品 如果您还希望在您的工作/实践实体中有一个
int
列(
AccountId
),您可以使用ModelBuilder进行此操作。实体框架只创建一个外键列,如您所需

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Job>.HasRequired(x => x.Account).WithMany().HasForeignKey(x => x.Accountid);
 //
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity.HasRequired(x=>x.Account).WithMany().HasForeignKey(x=>x.Accountid);
//
}
更多信息

使现代化 您可以使用来生成
来自您现有数据库的模型。

我很感谢您的回答,但我正在使用现有数据库。当我尝试您的建议时,我收到以下消息:“无法确定类型“Practice”和“Account”之间关联的主体端。必须使用relationship fluent API或数据批注显式配置此关联的主体端。”我认为您应该使用实体框架电动工具。现在在我的回答中有一个链接。希望这有帮助
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Job>.HasRequired(x => x.Account).WithMany().HasForeignKey(x => x.Accountid);
 //
}