Я начал работать над проектом MVC 3, которому нужны данные из огромной существующей базы данных.
Моя первая идея заключалась в том, чтобы использовать EF 4.1 и создать группу POCO для представления нужных мне таблиц, но я начинаю думать, что сопоставление будет слишком сложным, поскольку мне нужны только некоторые столбцы в некоторых из таблицы. (спасибо Стивену за разъяснения в комментариях.
Поэтому я решил попробовать Massive ORM . Обычно я использую реализацию Unit of Work, чтобы сохранить все прекрасно развязано и может использовать внедрение зависимостей. Это часть того, что у меня есть для Massive:
public interface ISession
{
DynamicModel CreateTable() where T : DynamicModel, new();
dynamic Single(string where, params object[] args)
where T : DynamicModel, new();
dynamic Single(object key, string columns = "*")
where T : DynamicModel, new();
// Some more methods supported by Massive here
}
И вот моя реализация вышеуказанного интерфейса:
public class MassiveSession : ISession
{
public DynamicModel CreateTable() where T : DynamicModel, new()
{
return new T();
}
public dynamic Single(string where, params object[] args)
where T: DynamicModel, new()
{
var table = CreateTable();
return table.Single(where, args);
}
public dynamic Single(object key, string columns = "*")
where T: DynamicModel, new()
{
var table = CreateTable();
return table.Single(key, columns);
}
}
Проблема возникает с First ()
, Last ()
и FindBy ()
методы. Massive основан на динамическом
объекте, называемом DynamicModel
, а не ] определяют любой из вышеперечисленных методов; он обрабатывает их с помощью реализации TryInvokeMethod ()
, переопределенной из DynamicObject
, вместо этого:
public override bool TryInvokeMember(InvokeMemberBinder binder,
object[] args, out object result) { }
Я не понимаю, как «связать» эти методы в моем ISession
. Как может мой ISession
обеспечить поддержку First ()
, Last ()
и FindBy () [117 3041]?
Другими словами, как я могу использовать все возможности Massive и по-прежнему иметь возможность отделить мои классы от доступа к данным?