2

だから私はEFを使用してカスタムメンバーシップを構築しようとしています。私は自分が何をしているのか本当にわかりませんが、これまでのところかなりスムーズに進んでいます。

私はデータベースイニシャライザーのステップにいます。プロジェクトが実行されるとすぐにデータベースにデータをダンプしようとしています。以下に示すように、私のクラスApplication.csはGUIDを主キーとして使用します。そのGUIDをデータベースに追加する方法を理解しようとしています。

これが可能かどうかはわかりませんが、これが私がやろうとしていることです。VS 2012で通常のWebアプリケーションプロジェクトを作成し、EFコードファーストを使用してそのデータベースを再作成しようとしたときに取得するデフォルトのログインデータベースを使用しました(練習用)。これは私がこれまでに得たものです。

クラス

public class Applications
        {

                [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
                public Guid ApplicationId { get; set; }

                [StringLength(125)]
                public string ApplicationName { get; set; }

        }

ビルド時にデータをdbにダンプするイニシャライザー(シードを含まない)

 private static List<Applications> addApplications()
    {
        var apps = new List<Applications>
        {
            new Applications
            {
                ApplicationId = Guid.NewGuid(),
                ApplicationName = "Test Login"

            }
        };

        return apps;
    }
  private static List<Memberships> addMemberships()
    {
        var mem = new List<Memberships>
        {
            new Memberships
            {
                UserId = Guid.NewGuid(),
                ApplicationId = ?, // How can this guid Match the one in  
                                   // in ApplicationId for the Application Table?
            }

        };
        return mem;
    }

「InvalidInitializermemberdeclarator」が表示されます。私が直面している問題は、GUIDがApplicationId複数のテーブル間で同じである必要があることです。これが可能かどうかさえわかりませんか?

どういうわけか共有しなきゃいけない気がした

   Guid AppId;
        AppId = Guid.NewGuid();
4

1 に答える 1

1

メンバーシップモデルでは、GUID "ApplicationId"を格納してアプリケーションを参照する代わりに、次のようなナビゲーションプロパティを使用する必要があります(ナビゲーションプロパティの詳細については、このリンクを参照してください)。

public class Memberships
{

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid UserId { get; set; }

    //if you set your model up like this entity framework will take care of creating
    /the foreign key for you.
    public Application MemberApplication { get; set; }

}

次に、次のように適切なアプリケーションをメソッドに渡します。

private static List<Memberships> addMemberships(Application app)
{
    var mem = new List<Memberships>
    {
        new Memberships
        {
            UserId = Guid.NewGuid(),
            Application = app, 
        }

    };
    return mem;
}

このようにモデルを設定すると、oopとリレーショナルデータベースを最大限に活用できます。お役に立てば幸いです。

于 2013-01-24T03:07:17.510 に答える