gpt4 book ai didi

entity-framework - EDMX 用于遗留代码 _and_ Code First 用于在一个 MVC 项目中一起进行新开发

转载 作者:行者123 更新时间:2023-12-01 03:58:34 24 4
gpt4 key购买 nike

情况如下:

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

ObjectContext 构造函数:

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 混合使用?

如果有任何想法,我将不胜感激。

编辑

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

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/

Could not find the conceptual model type

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

Entity Framework (4.3) looking for singular name instead of plural (when entity name ends with "s")

Building an MVC 3 App with Database First and Entity Framework 4.1

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

编辑二

从 DB First 到 CodeFirst,我们选择以下内容:
  • 从旧的 edmx 文件移至代码生成。与 EF 5.x DbContext Fluent Generator生成了模型对象,所以我们有了模型对象。

  • (右击进入EDMX编辑器,添加代码生成项。如果没有,要安装:工具菜单,扩展和更新, EF 5.x DbContext Fluent Generator)
    enter image description here
  • 模型对象和上下文是从 EDMX 复制的。
  • EDMX 删除了他下面的任何内容。
  • 将 ConnectionString 从困难的 EDMX 样式设置为简单的 codefirst 形式。
  • 最后,在大约 10 分钟内,我们从数据库优先转向了代码优先。在开发过程中,数据库中有 80 个表。
  • 在电源管理控制台中运行 Enable-Migrations,然后继续使用 CodeFirst。
  • 最佳答案

    在单独的程序集中保留不同“类型”的 EF(代码优先、数据库优先等)可能会有所帮助:EF is that it is not possible use code-first in an assembly with certain database-first attributes 的限制- 尽管较新版本的 EF 可能会解决此问题(也许这就是 EF6 alpha 适合您的原因)。

    关于entity-framework - EDMX 用于遗留代码 _and_ Code First 用于在一个 MVC 项目中一起进行新开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15268036/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com