Внедрение зависимостей с помощью Massive ORM: динамическая проблема

Я начал работать над проектом 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 и по-прежнему иметь возможность отделить мои классы от доступа к данным?

12
задан Cœur 29 May 2018 в 13:33
поделиться