2012-06-06 147 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"); 
    }); 
相关问题