【发布时间】:2021-04-23 04:26:21
【问题描述】:
我使用 SQLite 和 Entity Framework Core 实现一对多关系。我有 2 个表:表 Albums 代表“一个”,表 Songs 代表“许多”。这是我的 databaseContext 与 Album 和 Song 模型类:
namespace SQLite_test2
{
public class DatabaseContext : DbContext
{
public DbSet<Album> albums { get; set; }
public DbSet<Song> songs { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder dbContextOptionsBuilder)
{
dbContextOptionsBuilder.UseSqlite("Data Source =database.db");
}
}
public class Album
{
public int Id { get; set; }
public string Title { get; set; }
public string Artist { get; set; }
public List<Song> Songs { get; set; } = new List<Song>();
}
public class Song
{
public int Id { get; set; }
public string Songname { get; set; }
public int AlbumId { get; set; }
public Album Album { get; set; }
}
}
现在让我们添加 1 张专辑和 2 首相关歌曲:
class Program
{
static void Main(string[] args)
{
using (var databaseContext = new DatabaseContext())
{
Album myAlbum = new Album() { Title = "Toxicity", Artist = "System of A Down" };
Song mySong1 = new Song() { Songname = "Chop Suey" };
Song mySong2 = new Song() { Songname = "Psycho" };
myAlbum.Songs.Add(mySong1);
myAlbum.Songs.Add(mySong2);
databaseContext.albums.Add(myAlbum);
databaseContext.songs.Add(mySong1);
databaseContext.songs.Add(mySong2);
databaseContext.SaveChanges();
}
}
}
似乎工作正常:
[]1
当我尝试遍历专辑中的歌曲时,它不起作用:
class Program
{
static void Main(string[] args)
{
using (var databaseContext = new DatabaseContext())
{
//Album myAlbum = new Album() { Title = "Toxicity", Artist = "System of A Down" };
//Song mySong1 = new Song() { Songname = "Chop Suey" };
//Song mySong2 = new Song() { Songname = "Psycho" };
//myAlbum.Songs.Add(mySong1);
//myAlbum.Songs.Add(mySong2);
//databaseContext.albums.Add(myAlbum);
//databaseContext.songs.Add(mySong1);
//databaseContext.songs.Add(mySong2);
//databaseContext.SaveChanges();
var myAlbum = databaseContext.albums.Find(5);
if (myAlbum.Songs.Count == 0)
{
//no songs referenced
Console.WriteLine("no songs referenced");
}
foreach (var item in myAlbum.Songs)
{
Console.WriteLine("Artist: {0}, Album name: {1} song: {2}", myAlbum.Artist, myAlbum.Title, item.Songname);
}
}
}
}
如何使用 Entity Framework Core 获取 .Songs?
额外问题:即使我删除表,主键增量仍然存在。我可以通过将主键重置回 1 来删除表而不完全删除表并重新创建表吗?
【问题讨论】:
-
你的帖子提到了“实体框架”——而标签上写着
entity-framework-core——那么现在你实际上使用的是哪个版本的EF?确保这些内容在您的问题中一致! -
它是 Entity framework Core 5.0.2 - 提出这个问题时的最新版本。
标签: c# sqlite entity-framework-core