Asp.net mvc 访问现有数据库上下文属性

Asp.net mvc 访问现有数据库上下文属性,asp.net-mvc,linq,entity-framework,asp.net-mvc-4,Asp.net Mvc,Linq,Entity Framework,Asp.net Mvc 4,我已经花了很长时间试图解决这个问题,但运气不好,我猜这对有经验的人来说是一件轻而易举的事。我正在使用MvcMusicStore 我有一个db上下文,我已经添加了一个新的专辑与一个新的流派。如果要添加具有相同类型的另一张专辑,如何将现有类型分配给新专辑?如下面的第二张专辑。提前感谢您的帮助 protected override void Seed(Models.MusicStoreDBContext context) { context.Artists.Ad

我已经花了很长时间试图解决这个问题,但运气不好,我猜这对有经验的人来说是一件轻而易举的事。我正在使用MvcMusicStore

我有一个db上下文,我已经添加了一个新的专辑与一个新的流派。如果要添加具有相同类型的另一张专辑,如何将现有类型分配给新专辑?如下面的第二张专辑。提前感谢您的帮助

protected override void Seed(Models.MusicStoreDBContext context)
        {
            context.Artists.Add(new Models.Artist { Name = "Al Di Meola" });
            context.Genres.Add(new Models.Genre { Name = "Jazz" });
            context.Albums.Add(new Models.Album
            {
                Artist = new Models.Artist { Name = "Sublime" },
                Genre = new Models.Genre { Name = "Rock" },
                Price = 11.99m,
                Title = "40oz to Freedom"
            });
            context.Albums.Add(new Models.Album
            {
                Artist = new Models.Artist { Name = "Jawbox" },
                Genre = "Rock", // HOW DO I ASSIGN THIS?
                Price = 10.99m,
                Title = "For your own special sweetheart"
            });
只是使用一个变量

var rock = new Models.Genre{Name="Rock"};
 context.Genres.Add(rock);
 context.Albums.Add(new Models.Album
 {
     Artist = new Models.Artist { Name = "Sublime" },
     Genre = rock,
     Price = 11.99m,
     Title = "40oz to Freedom"
 });
 context.Albums.Add(new Models.Album
 {
     Artist = new Models.Artist { Name = "Jawbox" },
     Genre = rock
     Price = 10.99m,
     Title = "For your own special sweetheart"
 });

只需将新类型指定给一个变量,然后将属性设置为该变量

var rockGenre = new Models.Genre() { Name = "Rock" };
context.Genres.Add(rockGenre);

context.Albums.Add(new Models.Album
            {
                Artist = new Models.Artist { Name = "Sublime" },
                Genre = rockGenre,
                Price = 11.99m,
                Title = "40oz to Freedom"
            });
            context.Albums.Add(new Models.Album
            {
                Artist = new Models.Artist { Name = "Jawbox" },
                Genre = rockGenre,
                Price = 10.99m,
                Title = "For your own special sweetheart"
            });
还是子查询

protected override void Seed(Models.MusicStoreDBContext context)
    {
        context.Artists.Add(new Models.Artist { Name = "Al Di Meola" });
        context.Genres.Add(new Models.Genre { Name = "Jazz" });
        context.Albums.Add(new Models.Album
        {
            Artist = new Models.Artist { Name = "Sublime" },
            Genre = new Models.Genre { Name = "Rock" },
            Price = 11.99m,
            Title = "40oz to Freedom"
        });
        context.Albums.Add(new Models.Album
        {
            Artist = new Models.Artist { Name = "Jawbox" },
            Genre = (context.Genres.FirstOrDefault(x=>x.Name=="Rock")),
            Price = 10.99m,
            Title = "For your own special sweetheart"
        });

    }

干杯,伙计,这是我尝试的第一个解决方案,因为我认为它是最干净的,但是我得到了错误。。。“无法确定‘MvcMusicStore.Models.Genre_Albums’关系的主键。多个添加的实体可能具有相同的主键。“我缺少什么?听起来像是与数据库的关系问题。”。这张专辑和流派没有1:1的关系吗?如果这有意义的话,可以将许多专辑分成一个流派吗?使用实体框架,这是MusicStoreDbInitializer,将初始值放入数据库中。这很有意义,你能检查一下这种关系不是偶然的多对多关系吗?它似乎担心会出现PK约束。相册中的流派有FK,但不是相反。谢谢你的回答。我试过上面两种方法。这种方法奏效了。我确实首先尝试了直接访问方法(context.Genres.FirstOrDefault(x=>x.Name==“Rock”)),但出现了一个错误。