对于高级用户,我的问题可能略有不同或基本。
我有一个可由管理员自定义的Web应用程序。这意味着,管理员可以添加新的表模式或编辑表列,添加新的表列等。这些更改将映射到更改后发布的逻辑对象(非常类似于EDMX)。在发布时,我们生成存储过程,并进行必要的更改。
从UI我们使用这些逻辑对象来连接数据库(使用COM,它理解映射并执行适当的sprocs和视图等)。现在我想用EF来替换我们目前拥有的逻辑对象模型。我可以动态创建EDMX文件(csdl,msl,ssdl,cs文件),但我不确定如何编译它们并动态地将类打包到DLL中。这意味着,当我单击按钮时,将创建所有edmx相关文件,并且必须基于CS文件创建DLL,并且网站必须能够访问代码中的新更改。
您能帮我解决如何自动动态编译cs文件的问题。我不会在客户端拥有其他文件的源代码(例如default.aspx和其他文件)。
由于 阿尔伯特
答案 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模板”时找到大量信息。
希望至少有一点帮助!