4

对于这里的高级用户,我的问题可能有点不同或基本。

我有一个可由管理员自定义的 Web 应用程序。这意味着,管理员可以添加新表架构或编辑表列、添加新表列等。这些更改映射到更改后发布的我们的逻辑对象(非常类似于 EDMX)。在发布时,我们会生成带有必要更改的存储过程。

在 UI 中,我们使用这些逻辑对象来连接 DB(使用理解映射并执行适当的存储过程和视图等的 COM)。现在我正在考虑使用 EF 来替换我们目前拥有的逻辑对象模型。我可以动态创建 EDMX 文件(csdl、msl、ssdl、cs 文件),但我不确定如何编译它们并将类动态打包到 DLL 中。这意味着,当我单击按钮时,将创建所有与 edmx 相关的文件,并且必须基于 CS 文件创建 DLL,并且网站必须能够访问代码中的新更改。

你能帮我如何自动和动态地编译cs文件吗?我不会在客户端拥有其他文件(如 default.aspx 等)的源代码。

谢谢阿尔伯特

4

2 回答 2

2

Bepenfriends - 考虑使用 CSharpCodeProvider.CompileAssemblyFromFile,而不是从 shell 尝试 CSC。

需要注意的一件事是:如果您编译代码然后尝试再次编译它,您可能会锁定已创建的程序集。为此,我创建了一个 AsyncCompiler,它创建一个新的 AppDomain,在那里编译,然后卸载 AppDomain。

这是一些非常复杂的代码,但我正在这样做(生成 AEF XML 文件,从中生成代码,然后将所有内容编译到程序集中)并且效果很好。我唯一不太正确的是动态导入存储过程——我的 SSDL 有它们,但没有 CSDL 或 MSL。寻找解决方案把我带到了这里。

我希望这里的关键词足以让你朝着正确的方向前进。

于 2010-02-24T08:14:33.477 回答
0

我还没有真正给你一个明确的答案 - 但你可以考虑两个潜在的解决方案,可能在不久的将来:

1) 有一组名为PLINQO的 CodeSmith 模板,可从您的数据库生成您的 Linq-to-SQL 模型 (DBMX) 及其关联的 *.cs 文件。我亲自向他们询问了有关实体框架的支持,他们确认正在研究它——所以也许他们很快就会有。

由于这些是代码和模型生成模板,您绝对可以将它们用于 Linq-to-SQL 并针对 EDMX 进行调整。有点工作,但绝对有可能。拥有 *.cs 文件和 *.edmx 模型后,您可以使用安装在每台安装了 .NET 的计算机上的 CSC (C#) 命令行编译器从中生成生成的程序集。

2) 使用 .NET 4,新的 Entity Framework 4 将包括T4 模板(另一种代码生成技术),它允许您自定义代码生成。同样的故事也适用于这里 - 您可以在外部为类生成 EDMX 模型和关联的 *.cs 文件,并从这些模板动态生成程序集。

请参阅有关该主题的另一篇博客文章,在搜索(或绑定)或“EF4 T4 模板”时,您应该会找到很多信息。

希望至少有一点帮助!

于 2010-01-31T21:28:51.020 回答