【问题标题】:EF6 1:optional + 1:manyEF6 1:可选 + 1:很多
【发布时间】: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 正确的关系数据?

提前非常感谢! 蒙特

【问题讨论】:

  • 你到底需要什么?

标签: c# entity-framework


【解决方案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 将这些属性映射为特定表的外键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多