簡體   English   中英

實體框架為我使用變量的每個位置創建一個新列

[英]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"));
}

不正確,以上將不起作用!

我嘗試了上面的映射,它們實際上將不起作用,請看這里 您至少必須創建三個具有相同屬性的單獨的類,即AddressNicknameName

這是不可能的。 EF無法在同一上下文中兩次映射同一類。 您的單個User類只能以單個上下文類型映射到Users表或TempUsers表。 您需要兩個用戶類或兩個不同的上下文類型(具有不同的映射配置)-一種提供對Users表的訪問,另一種提供對TempUsers表的訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM