Entity Framework 为我使用变量的每个地方创建一个新列
Entity Framework creates a new column for each place I use a variable
我想使用 Entity Framework 6.1 存储来自 classes 的具有此布局的对象:
Class Foo {
int ID { get; set; }
List<Bar> Names { get; set; };
List<Bar> Addresses { get; set; };
List<Bar> Nickname { get; set; };
}
Class Bar {
int ID { get; set; }
string Language { get; set; }
string value { get; set; }
}
Entity Framework 在我的数据库中 table dbo.Bar 中将栏 class 添加到此列中:
ID |语言 | Bar_FooId1 | Bar_FooId2 | Bar_FooId3
我明白为什么会这样。它既需要一个外键来将 Bar 中的值映射到我的 Foo table,也需要一种方法来显示它也映射了 Foo 中的哪个值。
虽然这看起来很糟糕,但列和单元格的数量很快就会激增,因为我将在我的数据库中的很多对象中使用 Bar。
是否可以做其他事情?例如。有第三个 table 通过某个标识符将 Bar 中的一行链接到特定的 属性 吗?或者可能从 Foo table 引用而不是对有问题的 Bar 行?
非常感谢!
您尝试过指定映射吗?
protected override void OnModelCreating(
DbModelBuilder modelBuilder)
{
if (modelBuilder == null)
throw new ArgumentNullException(nameof(modelBuilder));
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Foo>().HasMany<Bar>(_ => _.Names).WithRequired().Map(_ => _.ToTable("Names"));
modelBuilder.Entity<Foo>().HasMany<Bar>(_ => _.Addresses).WithRequired().Map(_ => _.ToTable("Addresses"));
modelBuilder.Entity<Foo>().HasMany<Bar>(_ => _.Nickname).WithRequired(_ => _.Foo).Map(_ => _.ToTable("NickNames"));
}
不正确,上面的不行!
上面的映射我都试过了,居然不行,看here。
您至少必须创建三个具有相同属性的独立 classes,Address
、Nickname
和 Name
那是不可能的。 EF 无法在同一上下文中映射相同的 class 两次。您的单个用户 class 只能映射到单个上下文类型中的用户 table 或临时用户 table。您需要两个用户 classes 或两种不同的上下文类型(具有不同的映射配置)- 一种提供对用户 table 的访问权限,第二种提供对 TempUsers table.
的访问权限
我想使用 Entity Framework 6.1 存储来自 classes 的具有此布局的对象:
Class Foo {
int ID { get; set; }
List<Bar> Names { get; set; };
List<Bar> Addresses { get; set; };
List<Bar> Nickname { get; set; };
}
Class Bar {
int ID { get; set; }
string Language { get; set; }
string value { get; set; }
}
Entity Framework 在我的数据库中 table dbo.Bar 中将栏 class 添加到此列中:
ID |语言 | Bar_FooId1 | Bar_FooId2 | Bar_FooId3
我明白为什么会这样。它既需要一个外键来将 Bar 中的值映射到我的 Foo table,也需要一种方法来显示它也映射了 Foo 中的哪个值。
虽然这看起来很糟糕,但列和单元格的数量很快就会激增,因为我将在我的数据库中的很多对象中使用 Bar。
是否可以做其他事情?例如。有第三个 table 通过某个标识符将 Bar 中的一行链接到特定的 属性 吗?或者可能从 Foo table 引用而不是对有问题的 Bar 行?
非常感谢!
您尝试过指定映射吗?
protected override void OnModelCreating(
DbModelBuilder modelBuilder)
{
if (modelBuilder == null)
throw new ArgumentNullException(nameof(modelBuilder));
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Foo>().HasMany<Bar>(_ => _.Names).WithRequired().Map(_ => _.ToTable("Names"));
modelBuilder.Entity<Foo>().HasMany<Bar>(_ => _.Addresses).WithRequired().Map(_ => _.ToTable("Addresses"));
modelBuilder.Entity<Foo>().HasMany<Bar>(_ => _.Nickname).WithRequired(_ => _.Foo).Map(_ => _.ToTable("NickNames"));
}
不正确,上面的不行!
上面的映射我都试过了,居然不行,看here。
您至少必须创建三个具有相同属性的独立 classes,Address
、Nickname
和 Name
那是不可能的。 EF 无法在同一上下文中映射相同的 class 两次。您的单个用户 class 只能映射到单个上下文类型中的用户 table 或临时用户 table。您需要两个用户 classes 或两种不同的上下文类型(具有不同的映射配置)- 一种提供对用户 table 的访问权限,第二种提供对 TempUsers table.
的访问权限