Visual Studio 2019中使用Entity Framework向LocalDB添加数据失败问题
问题排查与解决步骤
- 首先解决控制台无输出的问题
控制台程序执行完成后会自动退出,很容易出现输出一闪而过未被观察到的情况。请在Main方法的using代码块结束后添加Console.ReadKey();,运行后控制台会停留,即可看到Count()的输出结果:
static void Main(string[] args) { Database.SetInitializer(new DropCreateDatabaseAlways<EmployeeDb>()); using (IRepository<Employee> employeeRepo = new SqlRepository<Employee>(new EmployeeDb())) { AddEmployees(employeeRepo); CountEmployees(employeeRepo); } // 新增这行,按下任意键才会关闭控制台 Console.ReadKey(); }- 首先解决控制台无输出的问题
- 配置正确的LocalDB连接字符串
你没有在配置文件中指定EmployeeDb对应的连接字符串时,EF会默认连接本地SQL Express实例,不会在项目相关目录生成LocalDB的mdf文件。请在项目的App.config文件的<configuration>根节点下添加如下配置:
<connectionStrings> <add name="EmployeeDb" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\EmployeeDb.mdf;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings>注意:配置中的
|DataDirectory|对应控制台项目的输出目录,默认是bin/Debug或者bin/Release文件夹,你需要到该路径下查找生成的数据库文件,而非项目根目录。- 配置正确的LocalDB连接字符串
- 确保
Employee实体类定义了主键
EF要求所有实体必须有主键属性,默认会识别命名为Id或者EmployeeId的属性作为主键,如果缺少该定义会导致数据映射失败,无法正常写入。请确保你的Employee类包含主键定义:
public class Employee { // 必须有主键属性 public int Id { get; set; } public string Name { get; set; } }- 确保
- 排查EF运行日志定位问题
你可以在EmployeeDb的构造函数中添加日志输出,将EF生成的SQL语句、连接信息全部打印到控制台,快速定位连接目标错误、SQL执行异常等问题:
public class EmployeeDb : DbContext { public EmployeeDb() { // 输出所有EF操作日志到控制台 Database.Log = Console.WriteLine; } public DbSet<Employee> Employees { get; set; } }- 排查EF运行日志定位问题
- 确认SQL Server对象资源管理器连接的实例正确
目前主流版本的LocalDB默认实例名为MSSQLLocalDB,VS2012及更早版本的默认实例名为v11.0,请确认你在对象资源管理器中连接的是对应实例,即可看到生成的EmployeeDb数据库。
- 确认SQL Server对象资源管理器连接的实例正确
内容的提问来源于stack exchange,提问作者Satashree Roy
相关产品推荐
相关产品推荐

