2016-10-21 1 views
3

私は私のデータ層で少し賢明な/愚かな何かをしようと思った。私はJon WagnerのInsight.Databaseを使用していますが、私のテーブルのほとんどはCRUD操作のセットを持っています。だから私はこれをしない理由を、考え出し:Insight.Databaseは[Schema]アノテーションを継承しますか?

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 = {「ストアドプロシージャが存在しない 『を選択します』。」 }

でも、Clients.Selectが確実に存在します。

これは、([Sql]アノテーションを持たない)ベースインターフェイスが継承され、後のアノテーションをオーバーライドする[Sql(Schema = "dbo")]の既定値を持つことを示しています。

これは正しいですか?それが正しい場合、ベーススキーマを無効にする方法はありますか?そうでない場合、何が起こっているのですか?

+0

明確にするために、私は{"ストアドプロシージャ 'Upsert'は存在しません。}}という意味で、予約語ではありません。 –

答えて

0

少し遅くなっていますが...

いいえ。 Insightは[Sql]アノテーションを継承しません。

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

これは、私たちが望むやり方ではうまくいかない素晴らしいトリックです。

関連する問題