[英]How to get reference for child entries of the parent in one-to-many relationship?
我实现了与 SQLite 和 Entity Framework Core 的一对多关系。 我有 2 个表:代表“一个”的表Albums
和代表“许多”的表Songs
。 这是我的 databaseContext 与Album
和Song
model 类:
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 来删除表吗?
尝试明确包括歌曲:
var myAlbum = databaseContext.albums.Include((x) => x.Songs).Where((album) => album.Id == 5).FirstOrDefault();
至于奖金问题。 ef 中没有直接的方法来重新设置主键。 虽然您可以使用这样的直接 sql 语句(删除数据后):
efcore 3.x
databaseContext.Database.ExecuteSqlRaw("DBCC CHECKIDENT('Albums', RESEED, 0)")
其他
databaseContext.Database.ExecuteSqlCommand("DBCC CHECKIDENT('Albums', RESEED, 0)")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.