实体框架未使用指定名称创建数据库,而是创建了自己的名称,为什么?

时间:2019-03-20 06:43:26

标签: c# asp.net-mvc entity-framework

需要帮助,我是MVC和EF的新手

因此,我尝试使用代码优先方法来创建数据库。 我指定了以下连接字符串

<add connectionString="Data Source=(local);Initial Catalog=SalesERPDB;Integrated Security=True"
        name="SalesERPDAL" 
         providerName="System.Data.SqlClient"/>
  </connectionStrings>

,我希望EF创建一个名为SalesERPDB的数据库。而是创建了一个具有以下名称“ MVC.DataAccessLayer.SalesERPDAL”的数据库。其中MVC.DataAccessLayer是声明SalesERPDAL(一个类)并继承DBcontext的命名空间。

简而言之,EF会使用继承DBcontext的类的标准名称来命名数据库。

namespace MVC.DataAccessLayer
{
    public class SalesERPDAL : DbContext //i think it will help in interacting with DB
    {
        protected override void OnModelCreating(DbModelBuilder modelBuilder) //i think used to build a model
        {
            modelBuilder.Entity<Employee>().ToTable("TblEmployee");
            base.OnModelCreating(modelBuilder);
        }

        public DbSet<Employee> DALEmployees { get; set; } //Dbset will represent all the employees that can be queried from the database.

    }
}

我有2个问题:

  1. 为什么使用特定名称而不是连接字符串的名称?
  2. 如何修改我的代码,以便我可以根据需要命名服务器?

对不起,如果是重复的问题。

1 个答案:

答案 0 :(得分:2)

  1. 缺少构造函数方法。应该将ConnectionString名称作为基本方法的参数来提供,以便您的应用程序可以知道使用什么名称来创建数据库。否则,它将创建名为DbContext类名称的数据库(即MVC.DataAccessLayer.SalesERPDAL)。

  2. 可以添加一个构造方法,例如:

    public SalesERPDAL() : base("SalesERPDAL") { }