[英]Entity Framework creates a new column for each place I use a variable
我想使用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; }
}
實體框架將Bar類分解為數據庫中表dbo.Bar的以下列:
ID | 語言| Bar_FooId1 | Bar_FooId2 | Bar_FooId3
我了解為什么會這么做。 它既需要將Bar中的值映射到我的Foo表的外鍵,也需要顯示它也映射了Foo中的哪個值的方法。
但是,這看起來並不好,而且列和單元格的數量迅速激增,因為我將在數據庫中的許多對象中使用Bar。
可以做其他事情嗎? 例如,有第三個表通過某些標識符將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表的訪問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.