0

MVCミュージックストアのチュートリアルに従って、データベースにサンプルデータがシードされます。クラスは次のAlbumとおりです。

namespace MvcMusicStore.Models
{
    public class Album
    {
        public int      AlbumId     { get; set;}
        // ...
    }
}

次に、チュートリアルで使用されているサンプルデータクラスで、メソッドAlbum内に次のようなオブジェクトが作成されます。Seed()

new Album { Title = "The Best Of Billy Cobham", 
Genre = genres.Single(g => g.Name == "Jazz"), 
Price = 8.99M, Artist = artists.Single(a => a.Name == "Billy Cobham"), 
AlbumArtUrl = "/Content/Images/placeholder.gif" }

私のプロジェクトにはクラスがありますTenant

public class Tenant
{
    [key]
    public int      TenantId     { get; set;}
    // ...
}

私のSeed()方法では、次のようなテナントを作成します。

new Tenant { UserId=1,  UserName="Matthew" /*...*/ }

私のSeed()方法では、UserIdであるテナントPKを含めました-テナントはUserから派生しています。Seed()メソッドで、テナントのUserIdのPKが1であると明示的に言ったので、メソッドの実行時に問題が発生するのでしょうか。ミュージックストアのチュートリアルでは、作者がアルバムのPKを含めていないのでお願いします。

したがって、アルバムを作成するときにPKは明示的に指定されません。EFはデフォルトでPKを適用しますか?自分のプロジェクト用にかなりの量のサンプルデータを作成するのにしばらく時間を費やし、多くのエンティティのPKを手動で入力しました-EFはこれを受け入れますか、それとも問題が発生しますか?シードはサンプルデータを生成するための最良の方法ですか?代替手段ですか?

4

1 に答える 1

2

属性を追加しない場合、EFはor[Key]という名前のint読み取り可能-書き込み可能プロパティを見つけようとします。Id<yourClassName>Id

それで全部です。そのため、AlbumIdはクラスAlbumのPKと見なされます。そのクラスにはキー属性は存在しません。AlbumId= <nameOfClass>Id、これは読み取り/書き込み可能なintです。

キー属性を設定した場合、EFは別の属性を見つけようとしません。これは単なる慣例であり、冗長性を減らすことができます。

サンプルデータの場合、Seed()メソッドの本体は、コードファーストにそれらを配置するための優れた方法です。

于 2013-02-03T23:42:44.300 に答える