实体框架为我使用变量的每个地方创建一个新列
本文关键字:创建 框架 新列 一个 方创建 变量 实体 | 更新日期: 2023-09-27 18:15:11
我想使用Entity Framework 6.1来存储类中的对象:
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将Bar类转换为表dbo中的这些列。Bar in my database:
ID | Language | Bar_FooId1 | Bar_FooId2 | Bar_FooId3
我明白为什么会这样。它既需要一个外键,将Bar中的值映射到我的Foo表,也需要一种方法来显示它也映射到Foo中的哪个值。
这看起来什么都不好,但列和单元格的数量迅速爆炸,因为我将在相当多的对象中使用Bar在我的数据库。
有可能做别的事情吗?例如,有第三个表,链接一行在酒吧到一个特定的属性的一些标识符?或者从Foo表中引用到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"));
}
不正确,上面不能工作!
我尝试了上面的映射,它们实际上不会不工作,看这里。您至少必须创建三个具有相同属性的独立类,Address
, Nickname
和Name
那不可能。EF不能在同一上下文中映射同一个类两次。单个User类只能映射到单个上下文类型的Users表或TempUsers表。您需要两个用户类或两个不同的上下文类型(具有不同的映射配置)—一个提供对Users表的访问,另一个提供对TempUsers表的访问。