2016-07-20 2 views
0

SQL Serverをデータベースとして使用している.NET MVC 4アプリケーションを構築しています。データベース操作にDapperとDapper SimpleCRUDを使用します。私のデータベースでは、デフォルトのdboスキーマにテーブルがあり、dbo.clientsの代わりにproduct.clientsのような他のスキーマのテーブルもあります。データベース上の別のユーザーアカウント(製品スキーマの所有者であり、製品スキーマの既定のユーザー)にマップするSQLサーバーに別のログインを作成しました。しかし、この資格情報を使用してDBに接続すると、System.Data.SqlClient.SqlExceptionのような例外が発生します。無効なオブジェクト名 'clients'。今、私は検索して検索しましたが、デフォルトのdbo以外のスキーマからデータを読み込めるように、web.configに正しい接続文字列要素を作成する方法が見つかりませんでした。これはどうすればいいですか?デフォルトのDBOスキーマにないSQLサーバーデータベーステーブルからデータを読み取る方法

答えて

2

あなたは明示的に限り、SQLのユーザーはスキーマへのアクセス権を持っているとして、それが動作するはずクエリで

SELECT Id,ClientName FROM product.clients 

をスキーマ名を指定することもできます。

テーブルは2つのシャーマから必要に応じて参加できます。

SELECT C.Id,C.ClientName FROM product.clients C WITH (NOLOCK) 
INNER JOIN dbo.UserAccount U WITH(NOLOCK) 
         ON U.UserId=C.CreatedById 
0

[OK]をクリックして、解決策は簡単でしたが、見た目がわからない限り明白ではありませんでした。多分、私のgoogle-fuはあまり良くありません。

答えは、テーブル属性注釈でスキーマを定義できるということです。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using Dapper; 

namespace MyApp.Models 
{ 
    [Table("Clients", Schema="Products")] 
    public class Client 
    { 
     public int id { get; set; } 
     public string firstname { get; set; } 
     public string lastname { get; set; } 
    } 
} 

これはDapperとDapper SimpleCRUDが正しいテーブルを見つけてそこからデータを読み取るために機能します。

https://msdn.microsoft.com/en-us/library/system.data.linq.mapping.tableattribute(v=vs.110).aspx

関連する問題