C# 值为列表时的实体拆分
我有3个表存储我的MVC3程序的数据(我制作了示例表来说明) 我正在使用实体框架,但不知道如何连接这些表,因此我将得到如下结果:C# 值为列表时的实体拆分,c#,entity-framework,C#,Entity Framework,我有3个表存储我的MVC3程序的数据(我制作了示例表来说明) 我正在使用实体框架,但不知道如何连接这些表,因此我将得到如下结果: public class TableABC { public int Id { get; set; } public string Name { get; set; } public string Surname { get; set; } public List<string> Colours { get
public class TableABC
{
public int Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public List<string> Colours { get; set; }
public List<string> Pets { get; set; }
}
公共类表abc
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共字符串姓氏{get;set;}
公共列表颜色{get;set;}
公共列表宠物{get;set;}
}
我发现这叫做“实体拆分”,我需要映射这些表,但完全不知道如何开始
非常感谢你的帮助 您无法将基元类型映射到表,因此您应该使用另一个实体,而不是字符串列表:
public class TableABC
{
public int Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public virtual List<Colour> Colours { get; set; }
public virtual List<Pet> Pets { get; set; }
}
public class Colour
{
public int Id { get; set; }
public string Value { get; set; }
}
public class Pet
{
public int Id { get; set; }
public string Name { get; set; }
}
公共类表abc
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共字符串姓氏{get;set;}
公共虚拟列表颜色{get;set;}
公共虚拟列表{get;set;}
}
公共类颜色
{
公共int Id{get;set;}
公共字符串值{get;set;}
}
公营宠物
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
以下是映射(覆盖自定义DbContext的ModelCreating方法以提供映射):
modelBuilder.Entity().Property(t=>t.Name).HasColumnName(“Name”);
modelBuilder.Entity().Property(t=>t.姓氏).HasColumnName(“姓氏”);
modelBuilder.Entity()
.HasMany(t=>t.colors).WithRequired().HasForeignKey(c=>c.Id);
modelBuilder.Entity()
.HasMany(t=>t.Pets).WithRequired().HasForeignKey(p=>p.Id);
modelBuilder.Entity().Property(c=>c.Value).HasColumnName(“颜色”);
modelBuilder.Entity().HasKey(c=>new{c.Id,c.Value});
modelBuilder.Entity().Property(p=>p.Name).HasColumnName(“pets”);
modelBuilder.Entity().HasKey(c=>new{c.Id,c.Name});
请记住,我对颜色和宠物使用了复合键,它对所有记录都应该是唯一的。您是先使用代码还是先使用数据库?很遗憾,您无法将表映射到基本类型。每个实体都应该有id。因此,您应该有一些带有id和值的
颜色实体。表ABC应该包含颜色列表而不是字符串列表。petsI使用DbContext也是一样的,所以我认为首先是一个代码,但是如果我错了请纠正我。非常感谢,这非常有帮助
modelBuilder.Entity<TableABC>().Property(t => t.Name).HasColumnName("name");
modelBuilder.Entity<TableABC>().Property(t=>t.Surname).HasColumnName("surname");
modelBuilder.Entity<TableABC>()
.HasMany(t => t.Colours).WithRequired().HasForeignKey(c => c.Id);
modelBuilder.Entity<TableABC>()
.HasMany(t => t.Pets).WithRequired().HasForeignKey(p => p.Id);
modelBuilder.Entity<Colour>().Property(c => c.Value).HasColumnName("colours");
modelBuilder.Entity<Colour>().HasKey(c => new { c.Id, c.Value });
modelBuilder.Entity<Pet>().Property(p => p.Name).HasColumnName("pets");
modelBuilder.Entity<Pet>().HasKey(c => new { c.Id, c.Name });