实体框架 - 代码首先不在数据库中生成关联集合

时间:2010-12-13 07:56:14

标签: entity-framework-4

我首先使用代码的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)'

如何在测试类和关键字属性之间创建必要的表关系?

1 个答案:

答案 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映射类型中定义实体。 KeywordTag都是字符串类型。因此,要拆分此实体,您应该拆分类型。