ASP.net Entity-Framework (Basic) Вопросы - PullRequest
0 голосов
/ 26 сентября 2011

(ASP.net MVC 3.0 Razor, EF Code First)

Мой первый вопрос: где мне хранить мои данные?в инициализаторе или в .sdf?

И мой второй вопрос: у меня есть класс для песен и один для художников.

Это из моего инициализатора:

var Artists= new List<Artist>()
        {
            new Artist{ Name = "ArtistName", Birthday=DateTime.Parse("4-4-1988")}
        };
        Authors.ForEach(s => context.Authors.Add(s));
        context.SaveChanges();

        var Songs= new List<Song>()
        {
            new Song { Name="SongName", Genre = Genre.GenreTypes.Rock, Artist=Artists[0]} //<--
        };
        Books.ForEach(s => context.Books.Add(s));
        context.SaveChanges();

Проблема в том, где зеленая стрелка.Я пытаюсь найти художника по указанному выше списку (где я загрузил художников в базу данных), но когда я проверяю его (item.Artist.Name), я ничего не получаю.свойство художника равно нулю!Я не понимаюЗачем?я вообще делаю это правильно?(Я пытаюсь получить имя исполнителя, вот и все)

И последний вопрос: у меня также есть в классе автора список (список его песен).как мне загрузить его песни там?

1 Ответ

1 голос
/ 26 сентября 2011

Что ты имеешь в виду?Сохранить ваши данные?Ваши данные обычно сохраняются в базе данных, которую вы выбрали в свойстве connectionString.Инициализатор позаботится о создании базы данных, заполнении и т. Д.

Выбор песни с его исполнителем

Вы можете получить исполнителя, включив его в запрос.Например:

 yourContext.Songs.Include("Artist").toList()' 

Это вернет все песни, и исполнитель будет заполнен для каждой песни.

Выбор песни с его исполнителем

Таким же образом вы вводите Исполнителя для песни.

yourContext.Artists.Include("ListPropertyName").toList()

Вот ссылка, которая может вам помочь:

http://msdn.microsoft.com/en-us/library/bb896272.aspx

Сохранение песни вместе со своим исполнителем.

Я собираюсь показать, как я работаю, Ваши отношения должны быть примерно такими:

public class Artist
    {
        [Key]
        public Guid ID { get; set; }

        //..OtherProperties ...

        public virtual ICollection<Songs> Songs { get; set; }
    }

public class Song
    {
        [Key]
        public Guid ID { get; set; }

        //..OtherProperties ...


        //Foreign Key Stuff
        [ForeignKey("Artist")]
        public Guid ArtistId { get; set; }

        //Relationship
        public virtual Artist Artist { get; set; }
    }

Если вы работаететаким образом, вы можете просто ввести ArtistId вручную в песню.Таким образом, вам нужно будет сделать следующее:

var Artists= new List<Artist>()
        {
            new Artist{ Name = "ArtistName", Birthday=DateTime.Parse("4-4-1988"), ID = Guid.NewGuid()}
        };
        Authors.ForEach(s => context.Authors.Add(s));

        var Songs= new List<Song>()
        {
            new Song { Name="SongName", Genre = Genre.GenreTypes.Rock, ArtistId=Artists[0].ID} //<--
        };
        Songs.ForEach(s => context.Songs.Add(s));

        context.SaveChanges();

Теперь, как продвигается разделение идентификатора и фактического исполнителя.Это очень просто: когда вы создаете исполнителя, вы можете вручную установить идентификатор и использовать его позже в своем коде, вместо того, чтобы сначала сохранить исполнителя.Итак, сначала вы делаете своих исполнителей и устанавливаете там Id, а затем вы можете напрямую использовать его в своей песне.В вашем примере вы на самом деле делаете Savechanges () дважды.Если вы используете «мой» метод, вам нужно сохранить только один раз.Вы действительно должны проверить некоторые учебники по Entity Framework, Google - ваш друг :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...