6

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

项目有这行代码:

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

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

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

编辑:

Player.cs 类

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

编辑 12.05.2017

如果我更改database nameconnection string运行项目,它会创建database with the new name with all tables. 可能这会被击中的答案。

4

2 回答 2

7

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


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

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

于 2017-05-11T14:47:40.017 回答
0

在此分享我的观察。

主要有两种实现实体框架的方法。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 属性)显示它已导入数据库对象,这就是它的“数据优先”

于 2018-08-15T15:25:16.880 回答