Я начал работать над проектом MVC 3, который требует данных из огромной существующей базы данных.
Моя первая идея состояла в том, чтобы пойти дальше и использовать EF 4.1 и создать группу POCO для представлениятаблицы, которые мне нужны, но я начинаю думать, что отображение будет слишком сложным, поскольку мне нужны только некоторые столбцы в некоторых таблицах. (спасибо Стивену за разъяснения вкомментарии.
Так что я решил попробовать Massive ORM . Я обычно использую реализацию Unit of Work, поэтому я могу легко отделить все и использовать Dependency Injection. Это частьиз того, что у меня есть для 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
instead:
public override bool TryInvokeMember(InvokeMemberBinder binder,
object[] args, out object result) { }
Я не знаю, как "связать" эти методы в моем ISession
.Как мой ISession
может обеспечить поддержку First()
, Last()
и FindBy()
?
Другими словами, как я могу использовать все возможностей Massive и при этом быть в состоянииотделить мои классы от доступа к данным?