【问题标题】:LINQ to SQL : Need Different Usernames for Prod and Dev DBML On Table AttributeLINQ to SQL:表属性上的 Prod 和 Dev DBML 需要不同的用户名
【发布时间】:2011-01-10 16:45:39
【问题描述】:

这是一个与this question类似的问题

当我将开发应用程序部署到产品服务器时,我遇到了一个错误:

System.Data.SqlClient.SqlException:无效的对象名称“dbo.Login”。

linq 映射上的表属性看起来像 [Table(Name="dbo.Login")]

当我将 prod db 模式加载到 vs2008 服务器资源管理器中并用那个完全刷新我的 dbml 时,prod 上的应用程序可以工作,但现在 dev 上的应用程序无法工作。

linq 映射上的表属性现在看起来像 [Table(Name="prodDbUsername.Login")]

在我现在得到的开发服务器上

System.Data.SqlClient.SqlException:对象名称“prodDbUsername.Login”无效。

在 dev 和 prod 之间管理这些不同的用户前缀的最佳方法是什么?

【问题讨论】:

    标签: linq-to-sql deployment


    【解决方案1】:

    听起来您在不同的环境中有不同名称的相同表。解决问题的最简单方法是对所有环境使用相同的架构(数据可能不同,但如果架构不同,您会提出各种问题)。

    编辑:随着您的进一步澄清,这些表是使用不同的所有者或在不同的架构中创建的。有关差异的进一步说明,请参阅http://www.sqlteam.com/article/understanding-the-difference-between-owners-and-schemas-in-sql-server

    我建议您尝试使用以下语法创建表:

    CREATE TABLE [dbo].[MY_TABLE_NAME]...
    

    【讨论】:

    • 我使用开发人员的脚本创建了 prod 数据库。表、cols 或 fk 关系之间没有区别。
    • 在我看来,生产环境(托管公司)不允许通过 dbo.Tablename 引用表,它必须通过 dbuser.Tablename
    • 这篇文章很有帮助,谢谢。我在开发数据库上创建了一个模式,例如。 'prodDbUserName',然后在每个表上运行 [sp_changeobjectowner 'dbo.Login', 'prodDbUserName']。所以现在 dev 副本具有相同的表前缀,因此 prod 和 dev 使用相同的 dbml。
    【解决方案2】:

    如果您使用的是单个架构(即单个数据库中没有多个架构),您只需删除表上的架构前缀即可。

    例如改变:

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

    收件人:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多