2010-01-29 6 views
1

Ceci est un problème similaire à this questionLINQ to SQL: utiliser différents noms pour Prod et Dev DBML sur le tableau Attributs

Quand je déployé mon application dev au serveur prod je devenais une erreur:

système .Data.SqlClient.SqlException: nom d'objet incorrect 'dbo.Login'.

L'attribut de table sur la cartographie LINQ ressemble à [Table (Name = "dbo .Login")]

Lorsque je charge le schéma prod db dans l'explorateur de serveur VS2008 et rafraîchi dbml entièrement avec cette un, l'application sur prod fonctionne, mais maintenant l'application sur dev ne fonctionne pas.

L'attribut de table sur la cartographie LINQ ressemble maintenant [Table (Name = "prodDbUsername .Login")]

Sur le serveur dev je reçois maintenant

System.Data.SqlClient.SqlException : Nom d'objet incorrect 'prodDbUsername.Login'.

Quelle est la meilleure façon de gérer ces différents préfixes d'utilisateur entre dev et prod?

Répondre

2

Il semble que vous ayez des tables identiques nommées différemment dans vos différents environnements. Le moyen le plus simple de résoudre votre problème consiste à utiliser un schéma identique pour tous les environnements (les données peuvent être différentes, mais vous demandez toutes sortes de problèmes si le schéma n'est pas le même).

EDIT: Avec vos précisions, les tables sont créées avec un propriétaire différent ou dans un schéma différent. Voir http://www.sqlteam.com/article/understanding-the-difference-between-owners-and-schemas-in-sql-server pour plus de précisions sur la différence.

Je recommande que vous essayez de créer vos tables avec la syntaxe suivante:

CREATE TABLE [dbo].[MY_TABLE_NAME]... 
+0

I a créé le prod db avec un script du dev. Il n'y a pas de différences entre les tables, les cols ou les relations fk. – CRice

+0

Il me semble que l'environnement de production (société d'hébergement) ne permet pas de se référer à une table via dbo.Tablename et il doit être via dbuser.Tablename – CRice

+0

L'article a été utile merci. J'ai créé un schéma sur le dev db par exemple. 'prodDbUserName', puis exécute [sp_changeobjectowner 'dbo.Login', 'prodDbUserName'] sur chaque table. Donc maintenant, la copie de dev a le même préfixe de table, donc à la fois prod et dev travaillent avec le même dbml. – CRice

1

Si vous utilisez un seul schéma (ie pas plusieurs schémas dans un seul db), vous pouvez simplement supprimer le schéma préfixe sur vos tables.

E.g. changement:

<Table Name="dbo.person" Member="Persons"> 

Pour:

<Table Name="person" Member="Persons">