gpt4 book ai didi

c# - SQLMetal 生成类但不生成无参数构造函数

转载 作者:太空狗 更新时间:2023-10-29 21:52:01 25 4
gpt4 key购买 nike

我需要定期刷新我的 Linq To SQL 类;是的,我为没有足够彻底地考虑我的数据模式而感到羞耻,糟糕的开发人员,广告恶心。我发现 SQLMetal 几乎可以解决问题,但也许我从参数列表中遗漏了一些东西。

当我使用 Visual Studio 外部工具从 Shiny 的新工具栏按钮运行我的批处理文件时,

@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 文件包含到我的项目中?

问题二

为什么当我在手动包含新生成的 .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 文件对我来说不起作用。

最佳答案

简短的回答是 SQLMetal 不支持无参数构造函数。剩下的答案是你的部分类应该工作,但它应该是这样的:

namespace DAL {
public partial class DataDataContext
{
public DataDataContext() :
this(/* Get your connection string here */)
{
OnCreated();
}
}
}

兴趣点:

  • 调用 this(string) 构造函数而不是 base 以便
    如果您愿意,可以正确连接 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>

关于c# - SQLMetal 生成类但不生成无参数构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5291855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com