2012-06-06 46 views
3

我有一個現有的數據庫,其中有四個相同和無關的表。具有相同POCO類的多個表

我想使用相同的POCO類來描述所有四個,而不必創建同一類的重複。

這就是我的背景下看起來像至今:

class StatsContext : DbContext 
{ 
    // [MagicTableAttribute("map_ratings_vsh")] -- does something like this exist? 
    public DbSet<MapRatings> MapRatingsVSH { get; set; } 

    public DbSet<MapRatings> MapRatingsJump { get; set; } 

    // 2 more tables using same class 
} 

class MapRatings 
{ 
    public string SteamID { get; set; } 

    public string Map { get; set; } 

    public int Rating { get; set; } 

    [Column("rated")] 
    public DateTime Time { get; set; } 
} 

我的問題是,現有的表被命名爲「map_ratings_vsh」和「map_ratings_jump」,而我不能用數據說明TableAttribute因爲它只能在課堂上使用。

有沒有其他方法 - 也許流利的API - 來描述我的模式?

+0

通常,只會有一個表,然後使用鑑別器列來決定哪些實體是每種類型。你爲什麼不想這樣做? –

+0

@MystereMan,我完全同意,但我不得不使用這個現有的模式。 –

回答

7

一種方法是使用繼承。

[Table("map_ratings_vsh")] 
public class MapRatingsVSH : MapRatingsBase {} 

[Table("map_ratings_jump")] 
public class MapRatingsJump : MapRatingsBase {} 

public class MapRatingsBase 
{ 
    public string SteamID { get; set; } 

    public string Map { get; set; } 

    public int Rating { get; set; } 

    [Column("rated")] 
    public DateTime Time { get; set; } 
} 

然後你可以有你的DbContext的樣子:

public class StatsContext : DbContext 
{ 

    public DbSet<MapRatingsVSH> MapRatingsVSH { get; set; } 

    public DbSet<MapRatingsJump> MapRatingsJump { get; set; } 

} 

EF不應該理解的是,這些是即使實施將是在同一個地方的兩個不同表中的任何問題(MapRatingsBase

+0

這就是我最終決定的,所以我會接受這個答案。謝謝! –

0

我過去處理過的(哈希)方式是使用存儲過程或視圖返回數據,然後在DbContext實現上提供一個「AddEntity」或「SaveEntity」方法,該方法使有問題的實體

3

可以使用流利的API某些屬性,一個桌子和其他屬性映射到另一個這樣的表:我發現解決這個

modelBuilder.Entity<TestResult>() 
    .Map(m => 
    { 
     m.Properties(t => new { /* map_ratings_vsh columns */ }); 
     m.ToTable("map_ratings_vsh"); 
    }) 
    .Map(m => 
    { 
     m.Properties(t => new { /* map_ratings_jump columns */ }); 
     m.ToTable("map_ratings_jump"); 
    }); 
相關問題