与EntityFramework代码的关系首先使用DataAnnotations

时间:2011-12-22 12:42:14

标签: 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;
}

我希望能够通过Job对象访问Practice对象,如下所示:

Job.Account.Practice.Name

数据库结构已预先存在,因此更改它不是一种选择。我想让EF提供对这种关系的访问,我相信它可以。我确实通过将一个ICollection导航属性放到Account类的Practice上并使用ForeignKey在Practice类上注释一个Account导航属性来实现它,但必须有一种方法可以在不使用集合的情况下完成它。

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

1 个答案:

答案 0 :(得分:0)

描述

您不需要DataAnnotation属性来执行此操作。在Codefirst中,您可以执行以下操作。实体框架将生成您为您描述的表。

示例

Account {
   public int Id;
}

Job {
   public int Id;
   public virtual Account Account;
}

Practice {
   public int Id;
   public virtual Account Account;
   public string Name;
}

如果您还希望在作业/实践实体中使用ìnt列(AccountId),则可以使用模型构建器执行此操作。 Entity Framwork只创建一个外键列,就像你想要的那样。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Job>.HasRequired(x => x.Account).WithMany().HasForeignKey(x => x.Accountid);
 //
}

更多信息

ScottGu - Using EF “Code First” with an Existing Database

更新

您可以使用Entity Framework Power Tools CTP1生成 现有数据库中的模型。