5

私は、4 つの同一で関連のないテーブルを持つ既存のデータベースを持っています。

同じクラスの複製を作成せずに、同じ POCO クラスを使用して 4 つすべてを記述したいと考えています。

これは、これまでのところ私のコンテキストがどのように見えるかです:

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 など) はありますか?

4

3 に答える 3

9

これを解決するために私が見つけた 1 つの方法は、継承を使用することです。

[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 は、実装が同じ場所にある場合でも、これらが 2 つの異なるテーブルであることを問題なく理解できるはずです ( MapRatingsBase) 。

于 2012-06-07T00:54:15.957 に答える
3

次のように、流暢な API を使用して、一部のプロパティを 1 つのテーブルにマップし、他のプロパティを別のテーブルにマップできます。

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");
    });
于 2012-06-06T21:15:32.763 に答える
0

私が過去にこれを処理した (ハックな) 方法は、ストアド プロシージャまたはビューを使用してデータを返し、問題のエンティティを永続化する DbContext 実装で "AddEntity" または "SaveEntity" メソッドを提供することです。

于 2012-06-06T21:11:44.507 に答える