Entity framework 4 实体框架-代码首先不在数据库中生成关联集合
我首先使用代码的CTP5。以下面的简单类和关联的DbContext为例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
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