如何知道项目是代码优先还是数据库优先?

How to know project is code-first or database-first?

在现有项目中,我如何知道它是代码优先还是数据库优先?

项目有这行代码:

public class TestDBContext : DbContext
{
    public DbSet<Player> Players { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}

并且项目没有 .edmx 文件。如果需要任何其他细节,我会分享。

编辑:

Player.cs class

public class Player
{
    public int PlayerID { get; set; }
    public string PlayerName { get; set; }
}

编辑 2017 年 5 月 12 日

如果我从 connection string 和 运行 项目更改 database name,它会创建 database with the new name with all tables。也许这会成为答案。

如果这是一个数据库优先的项目,则有:


  • [name].edmx 图表文件,[name].Context.tt & .cs
  • 翻译成 class 的每个表都隐藏在树中,如 .edmx > .tt
  • OnModelCreating中,有一个throw new UnintentionalCodeFirstException()

如果不是,表中的所有 class 问题都在项目中(没有树)。

在这里分享我的观察。

主要有两种实现方式Entity Framework。 1.代码优先 如果选择,它将创建简单的 .cs 文件,开发人员稍后会根据他们的要求进行修改。

  1. 数据优先 如果选择,它将创建一个 [name].edmx 文件以及不同文件的层次结构。它包含 .Context.tt 和下面的 .Context.cs 文件。 .Context.cs 文件将包含以下代码段,指示诱导实体模型在创建时是空的还是与任何数据库对象一起使用。

    命名空间搜索 { 使用系统; 使用 System.Data.Entity; 使用 System.Data.Entity.Infrastructure;

    public partial class XYZ_MSCRMEntities : DbContext
    {
       public XYZ_MSCRMEntities()
        : base("name=xyz_MSCRMEntities")
       {
    }
    
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
    
    public virtual DbSet<AnyDatabaseTableOrView> TableOrViewPluralized { get; set; }
    }}
    

在上面的代码片段中,最后一行 (DbSet 属性) 表明它已经导入了数据库对象,这就是它的样子 "Data-first"

如果没有.edmx 文件,项目是code-first。