0

(ASP.net MVC 3.0 Razor、EF コード ファースト)

私の最初の質問は、データをどこに保存するのですか? イニシャライザまたは .sdf で?

2 つ目の質問はこれです。私は歌のクラスとアーティストのクラスを持っています。

これは私の初期化子からのものです:

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)、何も取得しません。アーティスト プロパティが null です。理解できません。なぜ?私はそれを正しく行うことさえできますか?(私はアーティストの名前を取得しようとしています、それだけです)

最後の質問: 私はまた、著者のクラスにリスト (彼の曲のリスト) を持っています。そこに彼の曲をどのようにロードすればよいですか?

4

1 に答える 1

1

どう言う意味ですか?データを保存しますか?データは通常、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 と実際のアーティストを分離することの利点は何でしょうか。非常に簡単です。アーティストを作成するときに ID を手動で設定し、最初にアーティストを保存する代わりにコードで後で使用することができます。最初にアーティストを作成し、そこに Id を設定すると、曲で直接使用できます。あなたの例では、実際に Savechanges() を2回実行しています。「my」メソッドを使用している場合は、一度だけ保存する必要があります。Entity Framework に関するいくつかのチュートリアルを実際に確認する必要があります。Google はあなたの友達です :)

于 2011-09-25T21:59:33.273 に答える