我需要定期刷新我的Linq To SQL类;是的,因为我没有彻底考虑我的数据架构,糟糕的开发人员,令人讨厌,我感到羞耻。我发现SQLMetal几乎可以解决这个问题,但也许我从参数列表中遗漏了一些东西。
当我使用Visual Studio外部工具从我闪亮的新工具栏按钮运行我的批处理文件时,
@echo off
del c:\path\to\LinqToSql.dbml
SQLMetal.exe /server:SERVER\SQLSERVER /database:db /timeout:0 /dbml:"c:\path\to\LinqToSql.dbml" /namespace:DAL /context:DataDataContext /entitybase:System.Data.Linq.DataContext /language:csharp /pluralize
SqlMetal生成.dbml文件,万岁。但是,问题1 我可以以编程方式将.dbml文件包含到我的项目中吗?
问题2
为什么,当我手动包含新生成的.dbml文件后编译时,我的每个类都有以下与其无参数构造函数的行号相关的构建错误?例如30个表= 30个构建错误。
'System.Data.Linq.DataContext' does not contain a constructor that takes 0 arguments
实际
我确实注意到我的DataDataContext
生成的类是而没有一个无参数构造函数,所以我添加了一个部分类来补充,但它仍然不能解决问题。
public partial class DataDataContext
{
public DataDataContext() :
base(global::DAL.Properties.Settings.Default.MyConnectionString, mappingSource)
{
OnCreated();
}
}
我认为这个刷新过程可以自动化,但手动添加生成这些构造函数错误的生成的.dbml文件对我来说不起作用。
答案 0 :(得分:3)
简短的回答是SQLMetal不做无参数构造函数。其余的答案是你的部分课程应该有效,但它应该是这样的:
namespace DAL {
public partial class DataDataContext
{
public DataDataContext() :
this(/* Get your connection string here */)
{
OnCreated();
}
}
}
兴趣点:
获取您想要的连接字符串 - 一种简单的方法是
ConfigurationManager.ConnectionStrings [“MyConnectionSTring”]。ConnectionString
结合app.config中的以下内容:
<connectionStrings>
<add
name="MyConnectionSTring"
connectionString="Data Source=SQLServerName\instance;Initial Catalog=DatabaseName;Persist Security Info=True;User ID=user"
providerName="System.Data.SqlClient" />
</connectionStrings>
答案 1 :(得分:0)
我使用局部类来创建无参数构造函数(就像你一样)并且没有任何问题。
请注意,您正在DataDataContext
命名空间中创建DAL
。 (在上面的代码中缺少)
namespace DAL {
public partial class DataDataContext
{
public DataDataContext() :
base(global::DAL.Properties.Settings.Default.MyConnectionString, mappingSource)
{
OnCreated();
}
}
}
答案 2 :(得分:0)
1)你真的需要.dbml文件吗?也许你可以用这样的东西直接生成必要的ORM文件(并将它包含在你的解决方案中):
SQLMetal.exe /server:SERVER\SQLSERVER /database:DB /namespace:DAL /code:YourDatamapClass.cs /language:csharp
然后让批处理文件将现在刷新的类移动到正确的位置(可能是解决方案文件夹)。
2)你真的需要一个无参数构造函数吗?例如,将数据库连接字符串放入配置文件并使用它创建映射器对象:
//GetConnectionString (not included here) gets the connection string from config
DB context = new DB(GetConnectionString());