Insight.Database наследует аннотации [схемы]?

Так что я решил попробовать что-нибудь немного умнее / глупее в моем слое данных. Я использую Insight.Database Джона Вагнера, но большинство моих таблиц имеют набор операций CRUD. Итак, я решил, почему бы не сделать это:

public interface IDataInterface<T>
{
    Task<T> SelectAsync(int id);

    Task<IEnumerable<T>> SelectAsync();

    Task<int> UpsertAsync(T obj);

    Task<bool> UpsertManyAsync(IEnumerable<T> list);

    Task<bool> DeleteAsync(int id);

    Task<bool> DeleteManyAsync(IEnumerable<T> list);
}

и тогда я подумал, что могу сделать что-то вроде этого:

[Sql(Schema  = "Clients")]
public interface IClientDataInterface : IDataInterface<Client>
{

}

со всеми моими хранимыми процедурами, относящимися к таблице клиентов в схеме клиентов.

Тем не менее, это не работает и пробирается через InnerExceptions, пока я, наконец, не нажму paydirt, я получил следующую ошибку -

InnerException = {"Хранимая процедура Select не существует."}

Хотя Clients.Select определенно существует.

Это указывает на то, что базовый интерфейс (у которого нет аннотации [Sql]) по умолчанию имеет значение [Sql(Schema="dbo")], которое наследуется и переопределяет любую более позднюю аннотацию.

Это правильно? Есть ли способ отключить базовую схему, если это правильно? Если нет, что происходит?

1 ответ

Решение

Немного поздно возвращаюсь к этому, но...

Нету. Insight не наследует аннотации [Sql].

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Interface)]

Я думаю, это всего лишь один из тех милых маленьких трюков, которые не сработают так, как нам всем хотелось бы.

Другие вопросы по тегам