C# ef5中的1对多关系?

C# ef5中的1对多关系?,c#,entity-framework-5,relational-database,C#,Entity Framework 5,Relational Database,我有以下课程: public class ContentType { public int ContentTypeId{get;set;} public string Name{get;set;} public int Lang{get;set;} public bool IsPublished{get;set;} public int? ParentId { get; set; } public int UserId { get; set; }

我有以下课程:

public class ContentType
{
    public int ContentTypeId{get;set;}
    public string Name{get;set;}
    public int Lang{get;set;}
    public bool IsPublished{get;set;}
    public int? ParentId { get; set; }
    public int UserId { get; set; }
    public virtual User User { get; set; }
}

public class Context : DbContext
{
public Context()
{
    base.Configuration.LazyLoadingEnabled = false;
    base.Configuration.ProxyCreationEnabled = false;
    base.Configuration.ValidateOnSaveEnabled = false;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
public DbSet<ContentType> ContentTypes { get; set; }
}
公共类ContentType
{
public int ContentTypeId{get;set;}
公共字符串名称{get;set;}
公共int Lang{get;set;}
公共bool已发布{get;set;}
public int?ParentId{get;set;}
public int UserId{get;set;}
公共虚拟用户用户{get;set;}
}
公共类上下文:DbContext
{
公共上下文()
{
base.Configuration.LazyLoadingEnabled=false;
base.Configuration.ProxyCreationEnabled=false;
base.Configuration.ValidateOnSaveEnabled=false;
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Conventions.Remove();
}
公共DbSet ContentTypes{get;set;}
}

现在,每个contenttype都有一个父项和一个子项列表。如何使用ef5在模型和上下文中定义它?

您的父级和内容类型表(1-多(*)

公共类父类
{
公共int Id{get;set;}
//父类中的其他属性。。。。
公共虚拟ICollection内容类型{get;set;}
}
公共类ContentType
{
公共int Id{get;set;}
//其他属性。。。
public int ParentId{get;set;}/…这将帮助我们在fluent API中定义关系
公共父级{get;set;}
}
在DBContext类中

public DbSet<Parent> Parents { get; set; }
public DbSet<ContentType> ContentTypes { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Entity<ContentType>().HasRequired(c => c.Parent).WithMany(p =>p.ContentTypes).HasForeignKey(c => c.ParentId);
    }
公共数据库集父项{get;set;}
公共DbSet ContentTypes{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
modelBuilder.Entity().HasRequired(c=>c.Parent).WithMany(p=>p.ContentTypes).HasForeignKey(c=>c.ParentId);
}
同样地,您可以让
ContentType
类充当具有子类列表的父类。
你也可以看看这个。我希望它现在能有所帮助。:)

您的父级和内容类型表(1-多(*)

公共类父类
{
公共int Id{get;set;}
//父类中的其他属性。。。。
公共虚拟ICollection内容类型{get;set;}
}
公共类ContentType
{
公共int Id{get;set;}
//其他属性。。。
public int ParentId{get;set;}/…这将帮助我们在fluent API中定义关系
公共父级{get;set;}
}
在DBContext类中

public DbSet<Parent> Parents { get; set; }
public DbSet<ContentType> ContentTypes { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        modelBuilder.Entity<ContentType>().HasRequired(c => c.Parent).WithMany(p =>p.ContentTypes).HasForeignKey(c => c.ParentId);
    }
公共数据库集父项{get;set;}
公共DbSet ContentTypes{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
modelBuilder.Entity().HasRequired(c=>c.Parent).WithMany(p=>p.ContentTypes).HasForeignKey(c=>c.ParentId);
}
同样地,您可以让
ContentType
类充当具有子类列表的父类。
你也可以看看这个。我希望它现在能有所帮助。:)

如果希望contenttype类有子类,请使用以下代码:

public class ContentType
{
     ///other properties
     public ContentType Parent { get; set; }
     public int? ParentId { get; set; }
     public ICollection<ContentType> Childern { get; set; }
}
公共类ContentType
{
///其他属性
公共ContentType父项{get;set;}
public int?ParentId{get;set;}
公共ICollection子项{get;set;}
}
然后像这样映射:

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {
      modelBuilder.Entity<ContentType>()
            .HasMany(c => c.Children)
            .WithOptional(c => c.Parent)
            .HasForeignKey(c => c.ParentId);

    base.OnModelCreating(modelBuilder);

 }
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(c=>c.Children)
.WithOptional(c=>c.Parent)
.HasForeignKey(c=>c.ParentId);
基于模型创建(modelBuilder);
}

好了。

如果希望contenttype类有子类,请使用以下代码:

public class ContentType
{
     ///other properties
     public ContentType Parent { get; set; }
     public int? ParentId { get; set; }
     public ICollection<ContentType> Childern { get; set; }
}
公共类ContentType
{
///其他属性
公共ContentType父项{get;set;}
public int?ParentId{get;set;}
公共ICollection子项{get;set;}
}
然后像这样映射:

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {
      modelBuilder.Entity<ContentType>()
            .HasMany(c => c.Children)
            .WithOptional(c => c.Parent)
            .HasForeignKey(c => c.ParentId);

    base.OnModelCreating(modelBuilder);

 }
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(c=>c.Children)
.WithOptional(c=>c.Parent)
.HasForeignKey(c=>c.ParentId);
基于模型创建(modelBuilder);
}

好了。

我想你的孩子和父母是ContentType类型的吧

如果是,请在基类ContentType中添加属性:

    public virtual ICollection<ContentType> Children {get;set;}
    public virtual Content Type Parent {get;set;}
公共虚拟ICollection子项{get;set;}
公共虚拟内容类型父项{get;set;}
然后通过例如modelBuilder[ref:]或EntityTypeConfiguration[ref:]映射链接


基本上,它与您所做的任何其他关系都是一样的。

我假设您的孩子和家长是ContentType类型的

如果是,请在基类ContentType中添加属性:

    public virtual ICollection<ContentType> Children {get;set;}
    public virtual Content Type Parent {get;set;}
公共虚拟ICollection子项{get;set;}
公共虚拟内容类型父项{get;set;}
然后通过例如modelBuilder[ref:]或EntityTypeConfiguration[ref:]映射链接


基本上,这与您所做的任何其他关系相同。

您是先使用EF代码还是先使用设计器?我是先使用EF代码。您是先使用EF代码还是先使用设计器?我是先使用EF代码。@OndrejJanacek是的,我理解您的担忧。我会更新我的答案。谢谢。@OndrejJanacek更新:)谢谢您,先生,但家长不是另一张桌子。@OndrejJanacek是的,我理解您的担心。我会更新我的答案。谢谢。@OndrejJanacek更新:)谢谢,先生,但家长不是另一张桌子。