巨大な既存のデータベースからのデータを必要とするMVC3プロジェクトに取り組み始めました。
私の最初のアイデアは、EF 4.1を使用して、必要なテーブルを表すために一連のPOCOを作成することでしたが、一部のテーブルの一部の列のみが必要なため、マッピングが非常に複雑になると思い始めています。 。(コメントで説明してくれたStevenに感謝します。
だから私はMassiveORMを試してみようと思いました。私は通常、作業単位の実装を使用しているため、すべてを適切に分離しておくことができ、依存性注入を使用できます。これは私がMassiveのために持っているものの一部です:
public interface ISession
{
DynamicModel CreateTable<T>() where T : DynamicModel, new();
dynamic Single<T>(string where, params object[] args)
where T : DynamicModel, new();
dynamic Single<T>(object key, string columns = "*")
where T : DynamicModel, new();
// Some more methods supported by Massive here
}
そして、これが上記のインターフェースの私の実装です:
public class MassiveSession : ISession
{
public DynamicModel CreateTable<T>() where T : DynamicModel, new()
{
return new T();
}
public dynamic Single<T>(string where, params object[] args)
where T: DynamicModel, new()
{
var table = CreateTable<T>();
return table.Single(where, args);
}
public dynamic Single<T>(object key, string columns = "*")
where T: DynamicModel, new()
{
var table = CreateTable<T>();
return table.Single(key, columns);
}
}
問題は、、First()
およびLast()
メソッドFindBy()
にあります。Massiveは、呼び出されたオブジェクトに基づいており、dynamic
上記のメソッドを定義していません。代わりに、オーバーライドされた実装を介してそれらを処理します。DynamicModel
TryInvokeMethod()
DynamicObject
public override bool TryInvokeMember(InvokeMemberBinder binder,
object[] args, out object result) { }
でこれらのメソッドを「インターフェース」する方法に迷っていますISession
。、およびISession
のサポートをどのように提供できますか?First()
Last()
FindBy()
言い換えると、Massiveのすべての機能を使用しながら、クラスをデータアクセスから切り離すにはどうすればよいでしょうか。