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)]
Я думаю, это всего лишь один из тех милых маленьких трюков, которые не сработают так, как нам всем хотелось бы.