Я начал работать над проектом MVC 3, которому нужны данные из огромной существующей базы данных.
Моя первая идея заключалась в том, чтобы продолжить использование EF 4.1 и создать группу POCO для представления таблиц, которые мне нужны, но я начинаю думать, что сопоставление будет чрезмерно сложным, поскольку мне нужно только некоторые из столбцы в некоторых таблицах. (спасибо Steven для пояснения комментариев.
Так что я думал, что дам Massive ORM попробовать. Обычно я использую реализацию Unit of Work, поэтому я могу сохранить все красиво развязанными и использовать Injection Dependency. Это часть того, что у меня есть для 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 и все еще иметь возможность отделить мои классы от доступа к данным?