それはクライアントサーバアーキテクチャの問題のようなものです。共有DBアクセス方法
私のソリューションには2つのプロジェクトがあります.1つはエンティティフレームワークとSQL Server Compactデータベースで作業するクライアント側のプロジェクトと、もう1つはエンティティフレームワークでも実際のSQL Serverデータベースで作業するサーバー側のプロジェクトです。どちらのデータベースもまったく同じデータベーススキーマを持っているため、異なる.edmxファイルを使用していますが、生成されたエンティティは同じように見え、名前空間だけが異なります。ところで、ADO.NET DbContext Generatorを使用して、永続性を知らないエンティティクラスを生成しています。ここまでは順調ですね。今、私は例えば、内部のすべてのサーバーのデータベースへのアクセス方法と(かなり大きい)クラスを書いた:
public User CreateUser(string userId, string username, bool isGlobalAdmin)
{
using (var context = new ServerEntities())
{
try
{
var user = new User
{
UserID = userId,
Username = username,
IsGlobalAdmin = isGlobalAdmin
};
context.User.Add(user);
context.SaveChanges();
return user;
}
catch (Exception ex)
{
HandleEfException(ex);
}
}
return null;
}
問題は、私は、クライアント側で同じ方法で同じクラスが必要だということです。したがって、このクラスをクライアントプロジェクトにコピーし、ServerEntitiesの名前をClientEntitiesに変更し、クライアントエンティティを使用するための名前空間を変更します。何かが変わった場合、私は両方のクラスを維持する必要があるので、これはかなり醜いです。全体を抽象化し、両側(クライアントとサーバー)に同じクラス(他の2つのプロジェクトが参照する別のプロジェクトにあります)を使用する方法はありますか?
本当にありがとうございます。
ベスト、
アントニー
あなたの答えをありがとう、デイビッド。自分のシナリオでも可能かどうかはわかりませんでしたが、うまくいきました。生成されたすべてのエンティティを内部に持つ別々のプロジェクトを作成しました。私はまた、自動生成されたものを使うのではなく、私自身のDbContextクラスを書きました。このプロジェクトには、すべてのデータベースアクションを含むクラスも含まれています。このクラスのコンストラクターでは、サーバーとクライアントのどちらかを選択できるので、すべてのメソッドが特定のデータベースに正しい接続文字列を使用しています。それは魅力のように動作します:)再びありがとう、David! – Antony