需要生成EDMX文件并进行编译

时间:2010-01-31 19:18:42

标签: c# dynamic code-generation compilation edmx

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

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

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

您能帮我解决如何自动动态编译cs文件的问题。我不会在客户端拥有其他文件的源代码(例如default.aspx和其他文件)。

由于 阿尔伯特

2 个答案:

答案 0 :(得分:2)

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

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

这是一些非常毛茸茸的代码,但我正在这样做(生成AEF XML文件,从它们生成代码,然后将所有内容编译成程序集)并且它运行良好。我唯一没有做的就是动态导入存储过程 - 我的SSDL有它们但不包含CSDL或MSL。寻找解决方案让我在这里。

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

答案 1 :(得分: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 templates(另一种代码生成技术),允许您自定义代码生成。同样的故事适用于此 - 您可以从外部为类生成EDMX模型和相关的* .cs文件,并从这些模板中动态生成程序集。

在该主题上查看另一个blog post,您应该在gooling(或binging)或“EF4 T4模板”时找到大量信息。

希望至少有一点帮助!