EF和.EDMX的性能考虑

3
我正在研究与Entity Framework及其相关的.edmx文件有关的问题。
我们目前的设置中有许多这些文件编译成一个库,我们广泛使用它们。当然,这并不是一种优雅的解决方案——每当我们想要更新或添加数据库层中的内容时,我们就需要重新编译这个库。
我们专门使用存储过程,我们目前的方法是在对象上下文中使用ExecuteFunction方法。然而,这确实需要了解从edmx文件导入的函数返回什么类型(context.ExecutionFunction<T>()返回ObjectResult<T>)。
我的理论解决方案是将我们想要使用的任何.edmx文件存储在相对路径中,并在运行时让库加载它们所有。
有人试过这个吗?它有效吗?有没有考虑到性能问题?这将用于电子商务环境,因此效率和速度非常重要。
更多澄清的编辑:
它肯定可以将每个单独的.edmx文件编译成自己的程序集,这可能允许使用this。对此的任何意见也将很好。我们现在所做的呼叫类似于这样:
Database.MakeCall<T>("stored_procedure_name", parametersCollection, KnownDatabases.Database);

在其构造函数中,数据库处理程序将持有它所知道的每个数据库上下文(库中的每个.edmx文件)的实例。使用“KnownDatabases”枚举,它选择要针对哪个数据库运行查询。
理想情况下,我希望实现这样的调用:
Database.MakeCall<T>("context_name", "stored_procedure_name", parametersCollection);

在其构造函数中,数据库处理程序将搜索一个文件夹以查找所有的 .edmx 文件,然后针对每个上下文名称存储该上下文的实例。目前尚不清楚如何定义或获取 T
在这两种情况下,返回类型都将是 ObjectResult<T>
1个回答

0
你可能想考虑一种类似于Ruby的数据库映射,其中数据库模式在运行时确定,因此您无需维护DB-ORM映射库代码。
对于.NET,Subsonic、Castle和nHydrate都有这样的ORM。我知道这样的系统可以像C++实现(ODB)一样表现良好,它具有良好的性能统计数据(即使它会从模式生成代码,但它会自动执行此操作)。

我不完全确定那种方法会奏效。理想情况下,我们需要能够针对任何数据库运行已知名称的存储过程。目前,这是通过为每个数据库生成新的.edmx文件并将其编译到库中来实现的。我想要实现的是将运行存储过程的代码与其所运行的数据模型解耦。 - Andy Hunt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接