我一直在 asp.net 项目中使用这个漂亮的 LINQ to SQL 工具作为数据访问层。 我不断对基础表进行更改,为了使数据类识别更改,我必须删除并重新添加已更改的表。 是否有一些快捷方式可以重新生成数据层?
我遇到了同样的问题,使用 sqlmetal 绝对是解决它的好方法。 一种方法是创建一个执行 sqlmetal 命令的批处理文件,这样您就可以在需要更新 Linq 到 SQL 类时随时运行批处理,但更灵活的解决方案是使用 Visual Studio 的工具>外部工具函数在 Visual Studio 中创建一个命令,该命令使用您的参数运行 sqlmetal。 这很好用,您甚至可以将创建的命令拖放到工具栏上以进行单击重建。
你可以使用 sqlmetal,它是 linq to sql 类的命令行类生成器。
LINQ to SQL 版本 1 不支持检测数据库架构更改。修改生成的类的唯一方法是使用设计器或 SQLMetal 重新生成它们。
请记住,SQLMetal 和设计器之间没有太多区别,设计器是 SQLMetal 的更"漂亮"的 UI,并且隐藏了许多命令行开关。
我使用设计器,因为我懒得不断加载命令提示符。
此外,请确保不要将自己的任何代码写入生成的类中,否则您将在再生时丢失它。所有生成的类都是部分的,这意味着您可以轻松地在单独的文件中添加自己的扩展器。
对于SQLMetal不能完全满足它的情况/模型,例如,由于数据库和模型中的不同命名约定,或者L2S模型中的其他一些自定义,我有一个Visual Studio加载项,它添加命令以将L2S设计器与基础数据库[架构]同步。 (加上一堆其他 L2S 和 EF 相关功能)
您可以阅读有关它的更多信息,下载并从 http://www.huagati.com/dbmltools/获得 30 天试用许可证
过去在我工作的地方,我们创建了一个 sqlmetal 生成的 DataContext 的包装类。然后,我们创建了一个精简数据层,该层将 DataContext 和 sqlmetal 生成的所有类保密。
如果软件中的任何操作需要来自数据库的信息,它们必须通过这个包装层才能获得它。换句话说,在此数据层之外不会出现任何 LINQ to SQL。
这样,每当我们必须通过sqlmetal重新生成类时,只有部分数据层可能会中断。修复包含所有数据访问代码的一层比在整个逻辑或应用程序域中更改 LINQ to SQL 要容易得多。