如何从SQL服务器数据库表中读取不在默认DBO架构中的数据

时间:2016-07-20 21:00:58

标签: c# sql-server asp.net-mvc dapper

我正在使用SQL服务器构建一个.NET MVC 4应用程序作为我的数据库,我使用Dapper和Dapper SimpleCRUD进行数据库操作。在我的数据库中,我在默认的dbo模式中有表,我在其他模式中也有表,比如product.clients而不是dbo.clients。我在SQL服务器上创建了一个单独的登录名,该登录名映射到数据库上的单独用户帐户(谁是产品架构的所有者,默认为产品架构)。但是使用此凭据连接到数据库会出现类似System.Data.SqlClient.SqlException的异常:无效的对象名称'clients'。现在,我已搜索并搜索但无法找到如何在web.config中构造正确的连接字符串元素,以便我可以从默认dbo以外的模式中读取数据。我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以在查询中明确指定架构名称

SELECT Id,ClientName FROM product.clients

只要sql用户可以访问架构,它就可以工作。

您可以根据需要连接2个schamas中的表格。

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

答案 1 :(得分:0)

好的,解决方案很简单但不明显,除非你知道在哪里看。也许我的google-fu并不是很好。

答案是您可以在Table属性注释中定义模式。

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