我首先使用代码的CTP5。采用以下简单类和相关的DbContext
public class Test
{
public Test()
{
Keywords = new Collection<string>();
}
public int Id { get; set; }
public string Name { get; set; }
public ICollection<string> Keywords { get; set; }
}
public class TestDbContext : DbContext
{
public TestDbContext()
{
Database.Delete();
Database.CreateIfNotExists();
}
public DbSet<Test> Tests { get; set; }
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
类型'System.Collections.Generic.ICollection'必须是不可为空的值类型才能将其用作参数'T' 在泛型类型或方法'System.Data.Entity.ModelConfiguration.Configuration.Types.StructuralTypeConfiguration中 .Property(System.Linq.Expressions.Expression&GT)'
如何在测试类和关键字属性之间创建必要的表关系?
答案 0 :(得分:3)
添加课程Keyword
并将ICollection<string> Keywords {get; set;}
更改为ICollection<Keyword> Keywords {get; set;}
public class Keyword
{
public string Data {get;set;}
}
和代码模型创建如下:
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Keyword>()
.HasKey(x => x.Data);
base.OnModelCreating(builder);
}
想象一下,你有2个收藏1 - 关键词,2 - 标签。您的实现会将其映射到同一个表,因为在ORM映射类型中定义实体。 Keyword
和Tag
都是字符串类型。因此,要拆分此实体,您应该拆分类型。