EF6 1:可选 + 1:很多
Posted
技术标签:
【中文标题】EF6 1:可选 + 1:很多【英文标题】:EF6 1:optional + 1:many 【发布时间】:2015-01-31 03:05:01 【问题描述】:EF6 Code First 遇到了一点问题(在 MVC Web 应用程序中)。
在“AccountCircle”中对帐户进行分类的枚举:
public enum AccountType
Circle1,
Circle2,
Circle3,
Circle4,
Circle5
Accounts 的主类:
[Table("Accounts")]
public class AccountModel
public AccountModel()
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int id get; set;
public string Name get; set;
public string EMail get; set;
主要的公司模式
[Table("Companys")]
public class CompanyModel
public CompanyModel()
this.AccountCircle = new AccountCircleModel();
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int id get; set;
public string Name get; set;
public int? idAccountCircle get; set;
public AccountCircleModel AccountCircle get; set;
单圈类:
[Table("AccountCircles")]
public class AccountCircleModel
public AccountCircleModel()
this.Member = new List<AccountCirleMemberModel>();
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int id get; set;
public int idCompany get; set;
public CompanyModel Company get; set;
public List<AccountCirleMemberModel> Member get; set;
最后但并非最不重要的一点是帐户本身以及附加信息是什么类型的成员:
[Table("AccountCircleMember")]
public class AccountCirleMemberModel
public AccountCirleMemberModel()
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int id get; set;
public AccountType Typ get; set;
public int idAccount get; set;
public virtual AccountModel Account get; set;
public int idAccountCircle get; set;
public AccountCircleModel AccountCircle get; set;
还有 DbContext
public class TestContext : DbContext
public TestContext()
: base()
protected override void OnModelCreating(DbModelBuilder modelBuilder)
// modelBuilder Infos.....
base.OnModelCreating(modelBuilder);
#region Tables
public DbSet<AccountModel> Accounts get; set;
public DbSet<CompanyModel> Companys get; set;
public DbSet<AccountCircleModel> AccountCircles get; set;
#endregion
所以有一个公司,它有一个“AccountCircle”类型的可选属性(1:可选) 在 Accountcircle 中,有一个带有单独枚举的 Accounts List (AccountCirleMemberModel 1:many)
我尝试了数百种 modelBuilder 方法来为 EF6 提供必要的信息,但没有成功。 有人提示,给“受保护的覆盖无效 OnModelCreating”方法中的 DbModelBuilder 正确的关系数据?
提前非常感谢! 蒙特
【问题讨论】:
你到底需要什么? 【参考方案1】:不确定这是否回答了您的问题,但如果您想指定数据库中表之间的关系,请使用 EF Code First,您必须使用修饰符 virtual
为您的“导航”属性 - 映射到另一个桌子。所以代码看起来像:
[Table("Companys")]
public class CompanyModel
// other properties and the rest of the code here
public virtual AccountCircleModel AccountCircle get; set;
[Table("AccountCircles")]
public class AccountCircleModel
// other properties and the rest of the code here
public virtual CompanyModel Company get; set;
public virtual ICollection<AccountCirleMemberModel> Member get; set;
[Table("AccountCircleMember")]
public class AccountCirleMemberModel
// other properties and the rest of the code here
public virtual AccountModel Account get; set;
public virtual AccountCircleModel AccountCircle get; set;
您不需要添加可用作外键的属性 - EF 会处理这些。您可以指定它们,但您必须使用 fluent API 将这些属性映射为特定表的外键。
【讨论】:
以上是关于EF6 1:可选 + 1:很多的主要内容,如果未能解决你的问题,请参考以下文章