首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EntityFramework ComplexType参考EntityType

EntityFramework ComplexType参考EntityType
EN

Stack Overflow用户
提问于 2015-06-01 15:17:42
回答 2查看 185关注 0票数 2

我对EntityFramework的Code方法相当陌生,当我试图创建引用实体类型的可重用复杂类型时,我会遇到以下错误。

型号:

代码语言:javascript
复制
 class Bank
{
    public int Code { get; set; }
    public string Name { get; set; }
}
 class BankAccount
{
    public Bank Bank { get; set; }
    public int BankId { get; set; }
    public int Agency { get; set; }
    public int Account { get; set; }

}
 class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime BirthDate { get; set; }
    public BankAccount BankAccount { get; set; }
}

DbContext:

代码语言:javascript
复制
class DemoContext : DbContext
{

    public DbSet<Bank> Banks { get; set; }
    public DbSet<Person> People { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        modelBuilder.Entity<Bank>().HasKey(b => b.Code);
        modelBuilder.ComplexType<BankAccount>();

    }

}

当我试图添加一个迁移时,我会得到以下错误:

代码语言:javascript
复制
One or more validation errors were detected during model generation:

ComplexTypeProblem.EF.Bank: Name: Each type name in a schema must be unique. Type name 'Bank' is already defined.
ComplexTypeProblem.EF.Bank: : EntityType 'Bank' has no key defined. Define the key for this EntityType.
Banks: EntityType: EntitySet 'Banks' is based on type 'Bank' that has no keys defined.

在ComplexType具有指向EntityType的导航属性的情况下,实现这种关系有任何警告吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-01 16:08:35

不能有包含ComplexTypeEntityType。只有相反的方法。

ComplexTypes只是实体的属性,它们应该像普通字段一样处理代码。

票数 1
EN

Stack Overflow用户

发布于 2015-06-01 16:57:23

您是否试图为银行/ BankAccounts设置一个1 BankAccounts多个映射?如果是这样,我建议如下:

代码语言:javascript
复制
public partial class Bank
{
  public Bank()
  {
    BankAccounts = new List<BankAccount>();
  }

  public int Code { get; set;}
  public string Name { get; set;}

  public virtual ICollection<BankAccount> BankAccounts { get; set;}
}
public partial class BankAccount
{
  public int BankId { get; set;}
  public int Agency { get; set;}
  public int Account { get; set;}

  public virtual Bank Bank { get; set;}
}

并将OnModelCreating方法更改如下:

代码语言:javascript
复制
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Bank>().HasKey(b => b.Code);
    modelBuilder.Entity<Bank>().HasMany(m => m.BankAccounts).WithRequired(r => r.Bank).HasForeignKey(f => f.BankId).WillCascadeOnDelete(false);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30577169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档