我已经开始从事需要来自庞大现有数据库的数据的 MVC 3 项目。
我的第一个想法是继续使用 EF 4.1 并创建一堆 POCO 来表示我需要的表,但我开始认为映射会变得过于复杂,因为我只需要某些表中的一些列. (感谢史蒂文在评论中的澄清。
所以我想我会试试Massive ORM。我通常使用工作单元实现,因此我可以很好地解耦所有内容并可以使用依赖注入。这是我对 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 的所有功能,并且仍然能够将我的类与数据访问分离?