Je construis une application .NET MVC 4 avec SQL Server comme base de données et j'utilise Dapper et Dapper SimpleCRUD pour les opérations de base de données. Dans ma base de données, j'ai des tables dans le schéma dbo par défaut et j'ai aussi des tables dans d'autres schémas, comme product.clients au lieu de dbo.clients. J'ai créé une connexion distincte sur le serveur SQL qui mappe vers un compte d'utilisateur distinct (qui est le propriétaire du schéma du produit et par défaut vers le schéma du produit) dans la base de données. Cependant, la connexion à la base de données à l'aide de ces informations d'identification me donne des exceptions telles que System.Data.SqlClient.SqlException: nom d'objet non valide "clients". Maintenant, j'ai recherché et cherché, mais je n'ai pas trouvé comment construire l'élément de chaîne de connexion correct dans web.config afin que je puisse lire les données du schéma autre que le dbo par défaut. Comment puis-je faire cela?
Vous pouvez explicitement spécifier le nom du schéma dans votre requête
SELECT Id,ClientName FROM product.clients
Tant que l'utilisateur SQL a accès au schéma, il devrait fonctionner.
Vous pouvez joindre des tables de 2 schamas aussi bien que nécessaire.
SELECT C.Id,C.ClientName FROM product.clients C WITH (NOLOCK)
INNER JOIN dbo.UserAccount U WITH(NOLOCK)
ON U.UserId=C.CreatedById
Ok, la solution était simple mais pas évidente sauf si vous savez où chercher. Peut-être que mon google-fu n'est tout simplement pas très bon.
La réponse est que vous pouvez définir le schéma dans l'annotation d'attribut 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; }
}
}
Cela fonctionnera pour Dapper et Dapper SimpleCRUD pour trouver la table correcte et lire les données à partir de là.
https://msdn.microsoft.com/en-us/library/system.data.linq.mapping.tableattribute(v=vs.110).aspx