用于遗留代码的 EDMX 和用于新开发的 Code First 在一个 MVC 项目中一起使用

2024-03-15

情况如下:

我们有一个大型 MVC 项目,在 EF5.0 上采用数据库优先方法:

对象上下文构造函数:

namespace xxx.Models
{
    (...)
        public partial class xxxEntities : ObjectContext
        {
            #region Constructors

            /// <summary>
            /// (...)
            /// </summary>
            public xxxEntities() : base("name=xxxEntities", "xxxEntities")
            {
                this.ContextOptions.LazyLoadingEnabled = true;
                OnContextCreated();
            }

    (...)

连接字符串:

    <add name="xxxEntities" 
         connectionString="metadata=res://*/Models.xxxModel.csdl|
         res://*/Models.xxxModel.ssdl|res://*/Models.xxxModel.msl;
         provider=System.Data.SqlClient;provider connection string=&quot;
         data source=.;Initial catalog=xxxdb;
         integrated security=True;
         multipleactiveresultsets=True;
         App=EntityFramework&quot;"
         providerName="System.Data.EntityClient" />

我们选择 Code First 来测试独立命名空间上的新开发。

连接字符串:

<add name="xxxCFContext" 
     connectionString="Data Source=.;
     Initial Catalog=xxxdb;
     Integrated Security=True;
     User Instance=False;
     MultipleActiveResultSets=True" 
     providerName="System.Data.SqlClient" />

DbContext 构造函数:

namespace xxx.Models.CodeFirst
{
    public partial class xxxCFContext : DbContext
    {
        static xxxCFContext()
        {
            Database.SetInitializer<xxxCFContext>(new ValidateDatabase<xxxCFContext>());
        }

        public xxxCFContext()
            : base("Name=xxxCFContext")
        {
        }

(...)

我们运行 add-migrations、update-database 没有问题,构建成功完成。 但第一次使用代码优先的数据库访问时:

xxxCFContext cfdb = new xxxCFContext();

foreach (Xobject xobject in cfdb.Xobjects)

出现错误:

“找不到概念模型类型'xxx.models.yyyclass'”,但这个 yyyclass 存在于 edmx 中,而不是 codefirst 部分。

卸载EF5.0,安装EF6.0,错误消失。但我需要 EF5.0 而不是 6.0 alfa3 预发行版。

怎么了?我们如何将 edmx 与 codefirst 与 EF5.0 混合使用?

我将非常感激任何想法。

EDIT

我知道这个解决方法,但对我没有帮助:

有人使用代码优先方法与 Edmx 文件混合的实体框架吗? https://stackoverflow.com/questions/8396814/have-anyone-used-entity-framework-with-code-first-approach-mixed-with-edmx-file

http://blog.oneunicorn.com/2012/02/26/dont-use-code-first-by-mistake/ http://blog.oneunicorn.com/2012/02/26/dont-use-code-first-by-mistake/

找不到概念模型类型 https://stackoverflow.com/questions/8974973/could-not-find-the-conceptual-model-type

http://blog.oneunicorn.com/2012/02/26/dont-use-code-first-by-mistake/ http://blog.oneunicorn.com/2012/02/26/dont-use-code-first-by-mistake/

实体框架(4.3)寻找单数名称而不是复数名称(当实体名称以“s”结尾时) https://stackoverflow.com/questions/9441892/entity-framework-4-3-looking-for-singular-name-instead-of-plural-when-entity

使用数据库优先和实体框架 4.1 构建 MVC 3 应用程序 http://msdn.microsoft.com/en-us/data/gg685489.aspx

生成(使用 xxxmodel.Context.tt 和 xxxModel.tt)大型现有 edmx 的问题严重利用了 ObjectContext 的优势,因此我们不能简单地从 ObjectContext 更改为 DbContext(在现有 edmx 后面)。

Edit II

从 DB First 到 CodeFirst,我们选择以下内容:

  • 从旧的 edmx 文件移至代码生成。和EF 5.x DbContext Fluent 生成器 http://visualstudiogallery.msdn.microsoft.com/5d663b99-ed3b-481d-b7bc-b947d2457e3c生成了模型对象,所以我们有了模型对象。

(Right-click into EDMX editor and add code generation item. If you do not seem, to be installed: Tools menu, Extensions and Updates, EF 5.x DbContext Fluent Generator http://visualstudiogallery.msdn.microsoft.com/5d663b99-ed3b-481d-b7bc-b947d2457e3c) enter image description here

  • 模型对象和上下文是从 EDMX 复制的。
  • EDMX 删除了他手下的所有内容。
  • 将 ConnectionString 从困难的 EDMX 样式设置为简单的代码优先形式。
  • tadam,大约 10 分钟后,我们从数据库优先转向代码优先。在开发过程中,数据库中现有 80 个表。

  • 在电源管理控制台中运行 Enable-Migrations,然后继续使用 CodeFirst。


将 EF 的不同“类型”(代码优先、数据库优先等)保留在单独的程序集中可能会有所帮助:EF 的限制是不可能在具有某些数据库优先属性的程序集中使用代码优先 http://social.msdn.microsoft.com/Forums/en-US/adonetefx/thread/b87815ff-6569-4559-8268-7ae6433b8aa8- 尽管较新版本的 EF 可能会解决此问题(也许这就是 EF6 alpha 适合您的原因)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于遗留代码的 EDMX 和用于新开发的 Code First 在一个 MVC 项目中一起使用 的相关文章

随机推荐

  • 为什么 main() 需要大括号?

    我尝试了几种变体 main return or main if 并得到了不同的错误 其中最奇特的是 usr lib gcc i686 linux gnu 4 4 5 lib crt1 o In function start text 0x1
  • ANDROID STUDIO 无法访问fragment_main.xml中的对象

    我有一个简单的 Android 应用程序 布局文件夹显示一个activity main xml 文件和一个fragment main xml 文件 在该fragment xml 文件中 我放置了一个名为buttonTest 的按钮
  • Watchkit 动画实现:钟面、动画图表、圆形进度条

    我看过一些潜在 Watchkit 应用程序的非常基本的演示 其中一些似乎实现了动画 示例可能是 带有移动秒针甚至分针的钟面 条形图 其中的条形会随着新的实时数据进行动画显示或形状发生变化 圆形进度条 其进度条从零到当前值进行动画处理 到目前
  • [电子邮件受保护] 适用于 iPhone5

    我想更新我的应用程序 以便可以将其部署在 iPhone 5 上 Xcode 4 5 有一个 电子邮件受保护 cdn cgi l email protection这是一个黑色图像 640X1136 在iPhone5的模拟器中 仍然加载旧的 电
  • Rspec等于法

    据我了解 equal 方法检查对象是否相同 person Person create name gt David Person find by name David should equal person 这应该是真的 但这里不是有两个不同
  • 如何执行boost.test库中指定的测试套件

    我正在使用 Boost Test 库在 C 中实现单元测试用例 假设我有两间套房 例如 BOOST AUTO TEST SUITE TestA BOOST AUTO TEST CASE CorrectAddition BOOST CHECK
  • GWT:我如何重命名我的模块

    我想将下面的模块名称从 test 重命名为testing 但是当我将其从重构更改为测试时 它说 unable to find test gwt xml 它仍在寻找以前的模块名称 我该如何解决这个问题 thanks9
  • 调整变量跟踪分配长度

    在发布版本中 我从 GCC 4 4 7 收到以下信息警告 注意 使用 fvar tracking assignments 超出变量跟踪大小限制 重试而不使用 我是否超出了变量跟踪分配支持的变量名称长度 如果是的话 有没有办法调整支持的大小
  • Scipy/Pylab 错误..预期在:动态查找?

    在 OS X 上的 python 2 7 上使用全新的 Scipy numpy matplotlib 构建 我正在尝试import pylab但它似乎不起作用 为什么是这样 我收到的错误是 gt Traceback most recent
  • 我应该写 (x == 1) 或 (1 == x) 来检查值是否等于 1 吗? [复制]

    这个问题在这里已经有答案了 我想检查一个值是否等于1 以下代码行有什么不同吗 x 1 1 x 就编译器执行而言 在大多数语言中都是一样的 人们经常做 1 评估值 因为 1 不是左值 这意味着您不会意外地完成任务 Example if x 6
  • 渲染时捕获 TypeError:__init__() 得到意外的关键字参数“use_decimal”

    运行程序时我收到以下错误消息 Caught TypeError while rendering init got an unexpected keyword argument use decimal 这是我的代码 我正在使用 jquery
  • 从sql server下载varbinary数据

    我有一个 SQL Server 表 其中包含Varbinary Max 基本上是压缩数据的列 我的页面允许用户下载此数据 在通常的用户身份验证之后 以前它工作得很好 数据量较小 但现在随着时间的推移 数据也越来越大 我面临很多问题 基本上是
  • 在 Resharper 中重新绑定 Control+LeftClick

    我希望 Resharper 中的 Control LeftClick 绑定到 转到实现 而不是 转到声明 这是因为我使用很多接口 并且大多数时候我想访问实现而不是接口声明 有什么办法可以做到这一点吗 我知道关于ReSharper Optio
  • -Uri -UseBasicParsing powershell

    如果我使用这个 一切都好 脚本得到了我想要看到的数据 Wcl new object System Net WebClient Wcl Headers Add xxxxx xxxxx Wcl Proxy Credentials System
  • put_connections() 到 Koala 中的 Facebook 图在很长的延迟后失败

    我正在使用 Rails 3 2 5 和 Koala 1 3 0 不是最新的 因为最新的甚至拒绝运行 Heroku 的示例 Facebook 应用程序 Web 服务器是 Unicorn 当我尝试使用 put connections 发布到时间
  • 在 Eclipse 中找不到“Package Explorer”视图

    我在Eclipse中打开了一个项目 但发现我无法通过单击切换到包资源管理器窗口 gt 显示视图 在下面显示的菜单中显示视图 我只是找不到 Package Explorer 项目 可能是什么问题呢 并非所有视图都直接在每个视角中列出 选择 W
  • 自制程序 + opencv + libpng 出错

    在 Mac OS Maverick 上 我安装了 OpenCVbrew install opencv 我创建了一个简单的程序 复制自本教程 http blogs wcode org 2014 10 howto install build a
  • 在 Mathematica 中使用多个包和引用构建应用程序包

    我正在 Mathematica 中构建一个应用程序包 应用程序包含多个包并引用其他应用程序包 为了设置一切 我使用并遵循了工作台帮助部分的应用程序包说明 该部分也可以在以下位置找到 http reference wolfram com wo
  • Objective C 从另一个文件访问全局变量[重复]

    这个问题在这里已经有答案了 可能的重复 Cocoa Objective C 中的全局变量 https stackoverflow com questions 338195 global variables in cocoa objectiv
  • 用于遗留代码的 EDMX 和用于新开发的 Code First 在一个 MVC 项目中一起使用

    情况如下 我们有一个大型 MVC 项目 在 EF5 0 上采用数据库优先方法 对象上下文构造函数 namespace xxx Models public partial class xxxEntities ObjectContext reg