2016-06-14 3 views
2

データベースがSQLServer上に作成され、テーブルと列の名前が開発チームによって定義されたソフトウェア製品をデータベースの最初のアプローチを使用してVisual Studioにインポートしました。既存のコードを変更せずにコードファーストアプローチを使用するために、ORACLEを使用してテーブルと列の命名規則を要求する会社では、すべてのクラスプロパティの[Column]属性を使用して正しい命名規則でDbContextを作成しました私は別のDbContextを注入できるようにインターフェイスを作成しようとしていますが、将来はもっと柔軟なソリューションがあります。DbContextインターフェイスまたは抽象クラスを作成し、それを使って異なるDbContextオブジェクトを注入することは可能ですか?

私は.NETに慣れていますが、私のアプローチはDbContextの抽象クラスを作成し、テーブルを表すすべてのクラスのインタフェースを作成することです。これらのクラスの実装ではテーブルとカラムを変更できます必要に応じて名前を付けます。私の質問は、可能ですか?良いアプローチですか?

+0

これが可能かどうかわかりませんが、コンパイル時の定数として基になるテーブルと列の名前を定義するリソースファイルを使用すると、より簡単に問題を解決できます。さまざまなバックエンドのコンパイル時にリソースファイルを切り替えるだけです。 – esmoore68

+0

私が持っているもう一つの問題は、Guidの使用です。SQL Serverではマッピングが直接ですが、Oracleでは文字列を使用してコードを修正しています。これはやりたいことです。 –

+0

EF7をご覧ください。いくつかのプロバイダがあり、別のプロバイダを作成することができます。https://blogs.msdn.microsoft.com/dotnet/2015/11/18/entity-framework-7-rc1-available/ –

答えて

1

いいえ、ありません。しかし、あなたは、常にこのようなものに構築することができます

interface IDbContext : IDisposable 
{ 
    DbSet<TEntity> Set<TEntity>() where TEntity : class; 

    Task<int> SaveChangesAsync(); 
} 

public class MyDbContext : DbContext, IDbContext 
{ 
    public MyDbContext() 
     : base("myConnectionString") 
    { } 

    //implementation 
} 

を、必要なときにIDbContextを注入します。

+0

コンテキストオブジェクトを必要とするコントローラーはLINQステートメントでこのように使用します:from p in context.ExecutionLog p.ProcessCode == proccessCode、したがって、IDbContextはExecutionLog DbSetを定義する必要があり、参照できるようにIExecutionLogインターフェイスが必要です。 LINQステートメントでのそのクラスの一般的なプロパティ、私はあなたのアプローチでそれを実装することができます。 Thanks –

+0

@NicolasRestrepoテーブルデータを取得するには、 'context.Set 'を使用します。 –

+0

はい、私はこれが昨日、それを行う方法だったと思っています。それは機能していて、いくつかのコードをリファクタリングする必要があっただけで、SQLServer dbはGuidを使用して作成され、 Oracleには、Guidに直接マップするデータ型がないため、varcharを使用してコードを変更しました...だから、両方のdbsで同じデータ型を使用する方法を評価しています –

0

次の例のように、制約型のパブリックプロパティを注入するために、いくつかの型パラメータ制約でジェネリッククラスを使用することができ、あなたのDbContext:これはIMyContextと同様DbContextを使用して、あなたができるようになり

class Stuff<T> where T : DbContext, IMyContext 
{ 
    public T Context { get; set; } 
    // other members 
} 

タイプTの変数の機能

+0

あなたのクラスはDbContext *と* IMyContext –

+0

@ Sten-Petrovの両方でなければなりません。これは、特定のモデルシグネチャを実装する異なるdbコンテキストを注入するための方法です。 –

関連する問題