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

Entity framework 4 实体框架-代码首先不在数据库中生成关联集合,entity-framework-4,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> Keywor

我首先使用代码的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);
    }
}
公共类测试
{
公开考试()
{
关键词=新集合();
}
公共int Id{get;set;}
公共字符串名称{get;set;}
公共ICollection关键字{get;set;}
}
公共类TestDbContext:DbContext
{
公共TestDbContext()
{
Delete();
CreateIfNotExists();
}
公共数据库集测试{get;set;}
模型创建时受保护的覆盖无效(System.Data.Entity.ModelConfiguration.ModelBuilder ModelBuilder)
{       
基于模型创建(modelBuilder);
}
}
类型“System.Collections.Generic.ICollection”必须是不可为null的值类型,才能将其用作参数“T” 在泛型类型或方法“System.Data.Entity.ModelConfiguration.Configuration.Types.StructuralTypeConfiguration”中 .Property(System.Linq.Expressions.Expression>)'


如何在测试类和关键字属性之间创建必要的表关系,有什么想法吗?

添加类
关键字
并将
ICollection关键字{get;set;}
更改为
ICollection关键字{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);
}
模型创建时受保护的覆盖无效(ModelBuilder)
{
builder.Entity()
.HasKey(x=>x.Data);
基于模型创建(生成器);
}

想象一下,你有两个集合,一个关键字,两个标签。您的实现将它映射到同一个表,因为在ORM映射类型中定义了实体。而且
关键字
标记
都是字符串类型。因此,要拆分这些实体,您应该拆分类型

添加类
关键字
并将
ICollection关键字{get;set;}
更改为
ICollection关键字{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);
}
模型创建时受保护的覆盖无效(ModelBuilder)
{
builder.Entity()
.HasKey(x=>x.Data);
基于模型创建(生成器);
}

想象一下,你有两个集合,一个关键字,两个标签。您的实现将它映射到同一个表,因为在ORM映射类型中定义了实体。而且
关键字
标记
都是字符串类型。因此,要拆分这些实体,您应该拆分类型

谢谢,但是为什么必须为此创建一个类呢?无法从ICollection推断关系?不确定,但我认为,您应该为存储的所有数据添加类,因为您将POCO对象映射到DB,而不是基类型。感谢这一点,但是如何从keywords表中删除Test.Id并使测试类关系基于keywords.Id上的FK?添加
int-Id{get;set;}
关键字
类,只需删除对
OnModelCreating的覆盖
谢谢,但为什么必须为此创建一个类?无法从ICollection推断关系?不确定,但我认为,您应该为存储的所有数据添加类,因为您将POCO对象映射到DB,而不是基类型。感谢这项工作s、 但是,如何从关键字表中删除Test.Id并使测试类关系基于关键字.Id上的FK?将
int-Id{get;set;}
添加到
Keyword
类中,并简单地删除对
OnModelCreating