实体框架 – 用于遗留代码的EDMX _and_ Code First用于在一个MVC项目中进行新开发

情况如下:

我们在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没有问题,构建成功完成.
但是第一次使用代码优先的db访问:

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)

>从EDMX复制模型对象和上下文.
> EDMX被删除了他身下的任何东西.
>将ConnectionString从难以处理的EDMX样式设置为简单的代码形式.
>和tadam,大约10分钟后,我们从Database First迁移到Code First.在开发期间,db中存在80个表.
>在Power Management Console中运行Enable-Migrations,然后继续使用CodeFirst.

最佳答案 将EF(代码优先,数据库优先等)的不同“类型”保存在单独的程序集中可能会有所帮助:EF
is that it is not possible use code-first in an assembly with certain database-first attributes的限制 – 尽管更新版本的EF可能会解决这个问题(也许这就是EF6 alphas工作的原因)您).

点赞