繁体   English   中英

如何在一对多关系中获取父项的子条目的参考?

[英]How to get reference for child entries of the parent in one-to-many relationship?

我实现了与 SQLite 和 Entity Framework Core 的一对多关系。 我有 2 个表:代表“一个”的表Albums和代表“许多”的表Songs 这是我的 databaseContext 与AlbumSong 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM