如何使用EF7 fluent API為單個POCO創建兩個表?

c# ef-code-first entity-framework entity-framework-core

我想為單個實體類型創建兩個表。表是相似的,除了第二個可以錯過一些外鍵(順便說一句,它在該問題的上下文中不是很重要)。

第一個表將以通用方式使用(選擇查詢,小插入查詢等)。

第二個表是臨時的,將用於批量插入操作(即首先我使用SqlBulkCopy將數據插入臨時表,然後我使用MERGE查詢將項目插入到第一個表中)。這種方法允許我非常快速地插入數千條記錄。

那麼,強制EF7為同一個實體創建兩個相同的表的最佳方法是什麼?

我發現了類似的問題: 在EF Code First中對兩個相同的表使用相同的類型但似乎那個人(問一個問題的人)想要多個具有相同實體的DbSets。我的情況略有不同 - 我只想自動創建表,僅此而已。

一般承認的答案

好吧,似乎我可以自己回答這個問題。

所以,實際上我有一個醜陋的解決方案:使用簡單繼承,我可以創建相同的實體,可以用於在相同的DbContext中創建另一個DbSet。

此外,為了避免參與EF繼承策略,我需要保留基本類型未映射(即我不需要在數據庫模式中進行任何繼承連接的更改)。這個要求迫使我創建基類 (將被取消映射)和兩個繼承者 (一個用於主表DbSet,另一個用於臨時表DbSet)。

這種方法允許我避免同類型問題 ,更重要的是,允許我保持表模式完全相同而沒有任何問題。

例:

/// <summary>
/// Base entity, not used by EF at all - intended to define properties only.
/// </summary>
public class MyEntityBase
{
    public int Id { get; set; }
    public string Name { get; set; }
}

/// <summary>
/// That entity used to create primary table and used by app logic.
/// </summary>
public class MyEntity : MyEntityBase
{
}

/// <summary>
/// That entity used to create temp table only.
/// </summary>
public class MyTempEntity : MyEntityBase
{
}

/// <summary>
/// Here is our DB context with two DbSets...
/// </summary>
public class MyDbContext : DbContext
{
    /// <summary>
    /// That DbSet should be used by app logic.
    /// </summary>
    public DbSet<MyEntity> MyEntities { get; set; }

    /// <summary>
    /// That DbSet will force EF to create temp table.
    /// App logic shouldn't interact with it in common way 
    /// (only SqlBulkCopy and some hand-written queries) 
    /// so it is not public.
    /// </summary>
    protected DbSet<MyTempEntity> MyTempEntities { get; set; }
}



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因