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