如何确定EF5项目是代码优先还是数据库优先?

时间:2017-07-07 20:59:32

标签: c# .net entity-framework

我处理由另一个程序员创建的项目,该解决方案包含Entity Framework 5。

我无法确定使用它创建的实体框架工作流程(代码优先或数据库优先):

在我的项目中,我有这个课程:

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace HummerMobile.Core.Data
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;

    public partial class MobileMapEntities : DbContext
    {
        public MobileMapEntities()
            : base("name=MobileMapEntities")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public DbSet<BaseLayer> BaseLayers { get; set; }
        public DbSet<MapDefinition> MapDefinitions { get; set; }
        public DbSet<MapLayer> MapLayers { get; set; }
        public DbSet<Map> Maps { get; set; }
        public DbSet<SearchConfig> SearchConfigs { get; set; }
        public DbSet<VectorLayer> VectorLayers { get; set; }
        public DbSet<WFSLayer> WFSLayers { get; set; }
        public DbSet<WMSLayer> WMSLayers { get; set; }
        public DbSet<PointFeature> PointFeatures { get; set; }
        public DbSet<PointFeatureAttachment> PointFeatureAttachments { get; set; }
    }
}

但我也有一些edmx扩展名的文件。

任何想法我怎么能弄清楚它是由哪个实体框架创建的?

1 个答案:

答案 0 :(得分:1)

如果*.edmx文件的定义与DbContext.tt / DbContext.cs文件相同,那么它就是数据库优先(因为代码优先从不创建{{1}文件)。

在您的情况下,您说有一个*.edmx文件 - 所以它可能是数据库优先。

请注意,项目很可能包含两个单独的EF实体库,一个使用Database-First,另一个使用Code-First。确保从*.edmx文件中读取的.tt文件生成类以确定。

然而,它不一定是这两者之间的选择 - 还有#34;来自数据库的代码优先&#34;实体类型使用Visual Studio中的工具直接从数据库模式生成为C# - 通常您可以从它生成的统一且不易读的样式代码中发现它。

  • 数据库-第一:
    1. Visual Studio的工具检查实时数据库模式并生成*edmx文件,该文件定义实体及其关系。
    2. .edmx T4模板然后读取DbContext.tt文件以在其自己的edmx文件中生成实体类。
    3. 这种方法可以更加可维护,因为EDMX文件可以逐步更新,实体类型会自动重新生成。
  • 代码优先:
    1. 无需工具。你手工编写所有东西。不需要数据库。
    2. 这种方法仅适用于较小的项目,在本作者看来,它对于大型和复杂的数据库设计来说非常不切实际。它具有支持&#34;数据库迁移&#34;自动但需要广泛的保姆来处理重命名对象的情况,或者需要自定义ETL逻辑来将数据从一个模式转换为另一个模式。
  • 数据库代码优先:
    1. 类似于&#34;数据库优先&#34;除了生成中间EDMX文件之外,工具直接生成实体类.cs文件。
    2. 但缺少中间EDMX文件意味着不支持设计时的增量更改:每次数据库设计更改时都需要重新生成整个实体类和.cs代码 - 这可能需要一段时间用于复杂的数据库,这就是为什么Database-First在业务线应用程序中仍然非常流行的原因。