使用LINQ to SQL和动态表前缀

时间:2012-06-22 11:40:07

标签: c# .net linq

我创建了代表我的数据库的LINQ to SQL文件。 数据库中的表名格式如下:

[prefix]_tableName

,当我尝试更改designer.cs文件中的TableAttribute时,我希望前缀是动态的:

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.isftblprfx_config")]

为:

[global::System.Data.Linq.Mapping.TableAttribute(Name=String.Format("dbo.{0}_{1}", Server.TablesPrefix, "config")]

我遇到了构建时间错误:

  

属性参数必须是属性参数类型

的常量表达式,typeof表达式或数组创建表达式

有什么解决方案吗? 提前致谢

2 个答案:

答案 0 :(得分:1)

例外说明了一切。

An attribute is emitted into metadata when you compile your code,因此它的参数需要在编译时确定,它们不能在运行时更改。所以我希望你的Server.TablesPrefix不是常量或只读字符串。

如果要将上下文重用于不同的数据库,则它们应具有相同的模式。如果您无法更改模式,那么t4模板可能会提供解决方案。

答案 1 :(得分:0)

[global::System.Data.Linq.Mapping.TableAttribute(Name=String.Fromat("dbo.{0}_{1}", Server.TablesPerfix, "config")]

应该阅读

[global::System.Data.Linq.Mapping.TableAttribute(Name=String.Format("dbo.{0}_{1}", Server.TablesPrefix, "config")]

错字总是最大的敌人:)。