Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 值为列表时的实体拆分_C#_Entity Framework - Fatal编程技术网

C# 值为列表时的实体拆分

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

我有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; 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 });