我有三个表之间有以下关系:
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导航属性来实现它,但必须有一种方法可以在不使用集合的情况下完成它。
所以,问题是,我应该尝试使用哪些数据注释属性来获得所需的结果?
答案 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生成 现有数据库中的模型。