与大多数EF错误一样,我得到了一个非常普通的Entity Framework错误:“在EntityFramework.dll中发生了类型为System.Entity.Data.Infrastructure.DbUpdateException的未处理错误。在更新条目时发生了错误”。 请问如何处理此问题?
这里是上下文-我有3个项目,我希望通过Code First方法创建数据库。我大约遵循了官方文档中的步骤,但给出了自己的示例:
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中: [键] [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
...同样的问题
我期望数据库是自动生成的,但不会发生