3

所以我想我会在我的数据层中尝试一些聪明/愚蠢的东西。我正在使用 Jon Wagner 的 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>
{

}

与我的所有与客户模式中的客户表相关的存储过程。

但是,在我最终点击 paydirt 之前,这不起作用并通过 InnerExceptions 戳,我收到以下错误 -

InnerException = {"存储过程 'Select' 不存在。"}

即使 Clients.Select 肯定存在。

这向我表明,基本接口(没有 [Sql] 注释)具有 [Sql(Schema="dbo")] 的默认值,它被继承并覆盖任何以后的注释。

这是正确的吗?如果它是正确的,有没有办法禁用基本模式?如果不是,那是怎么回事?

4

1 回答 1

0

回到这个有点晚了,但是......

没有。Insight 不继承 [Sql] 注释。

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

我想这只是那些不会像我们所有人希望的那样工作的漂亮小技巧之一。

于 2017-10-17T13:49:52.857 回答