c# - EntityFramework.dll 中发生 DbUpdateException
问题描述
我收到一个非常通用的实体框架错误,就像大多数 EF 错误一样:“EntityFramework.dll 中发生 System.Entity.Data.Infrastructure.DbUpdateException 类型的未处理错误。更新条目时发生错误”。请对如何处理有任何想法?
这是上下文 - 我有 3 个项目,我希望通过 Code First 方法创建我的数据库。我大致遵循了官方文档中的步骤,但举了我自己的例子:
- ConsoleApp1:创建为控制台应用程序;安装包 EntityFramework
- SongDomain.Classes:创建为控制台应用程序;属性 - 输出类型:更改为类库;删除 App.config 添加 Classes.cs
- SongDomain.DataModel:创建为控制台应用程序;属性 - 输出类型:更改为类库;删除 App.config;添加 SongContext.cs
Classes.cs // 在这里定义模型;
using System.Collections.Generic;
namespace SongDomain.Classes
{
public class Song
{
public int Id { get; set; }
public string Name { get; set; }
public bool Active { get; set; }
public Album Album { get; set; }
public int AlbumId { get; set; }
public List<Genre> Genre { get; set; }
}
public class Album
{
public int Id { get; set; }
public string Name { get; set; }
public List<Song> Songs { get; set; }
}
public class Genre
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public List<Song> Song { get; set; }
}
}
现在,上下文类:
using SongDomain.Classes;
using System.Data.Entity;
namespace SongDomain.DataModel
{
public class SongContext : DbContext
{
public DbSet<Song> Songs { get; set; } // Song is needed, so have to reference the Classes project
public DbSet<Album> Albums { get; set; }
public DbSet<Genre> Genres { get; set; }
}
}
上下文派生自 System.Data.Entity.DbContext 并为我们模型中的每个类公开一个类型化的 DbSet。
我在 Program.cs 中实现 Main 方法:
using SongDomain.Classes;
using SongDomain.DataModel;
using System;
using System.Linq;
namespace ConsoleApp1
{
public class Program
{
static void Main(string[] args)
{
using (var db = new SongContext())
{
// Create and save a new song
Console.Write("Enter new song: ");
var name = Console.ReadLine();
var s = new Song { Name = name };
db.Songs.Add(s);
db.SaveChanges();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
}
你怎么看?乍一看,至少我做错了什么?我没有提供有关数据库的任何详细信息,因为我希望它通过代码生成,就像文档表明它是可能的(我知道在现实生活中,我不太可能不需要在设置中提供 db 配置文件)
PS。是的,我尝试将属性添加到 Song 中的字段 Id,如下所示:[Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
... 同样的问题
我期待数据库是自动生成的,但没有发生
解决方案
推荐阅读
- java - 如何停止上一个正在收听 kafka-topic 的线程
- angular - Http GET,角度
- go - 安装base64的问题
- html - jQuery将JSON项目值写入每个带有id的td
- activemq-artemis - ActiveMQ Artemis - 集群代理
- python - 随机读取 50% 的文件
- php - NGINX/PHP 无法访问根目录外的文件
- amazon-web-services - 如何自动将数据导入 AWS RDS
- firebase-cloud-messaging - Firebase 消息 - 订阅的最大频率
- c# - 通过 Docker 为 CodeFresh 过滤回归测试