2017-11-08 11 views
0

Entity Frameworkを使用してASP.NET MVCアプリケーションを作成しています。私の要件は、いくつかのデフォルト値をシード機能を使ってテーブルに挿入することです。Entity Frameworkのシード中に外部キーを渡す方法

値間に関係がない場合は正常に実行されました。しかし、Entity Frameworkでシードを使用して外部キー参照を挿入することはできません。私はロールとユーザーテーブルのデフォルトに合格している上記のコードで

protected override void Seed(VBlog.DbLayer.DbInitializer context) 
{ 
    //this(AddOrUpdate) will check first is there is alrady record exists or not in the database. 
    context.Roleses.AddOrUpdate(x => x.RoleName, 
      // master data 
      new Roles { RoleName = "Admin", Weightage = 3 }, 
      new Roles { RoleName = "User", Weightage = 1 } 
      ); 

    //adding the mast data for user table 
    context.Userses.AddOrUpdate(x=>x.EmailId, 
      new Users() 
       { 
        FirstName = "vir", 
        LastName = "acker", 
        EmailId = "[email protected]", 
        Password = password, 
        Gender = "Male", 
        Islocked = "false", 
        CreatedDate = DateTime.Now, 
       **Foreign key for Users table** 
       } 
      ); 

    //context.Userses.AddRange(defaultUserDataList); 
    base.Seed(context); 
} 

これはシード方法です。 1つの列、すなわちRoleIdUsersのテーブルに残っています。

Rolesテーブルの主キーをUsersテーブルの外部キーとして取得するにはどうすればよいですか?

+0

データベースからロールバックを取り出して、そのIDを新しいユーザーに渡す必要があります。 –

答えて

2

最も簡単な方法は、バックデータコンテキストからロールを取得し、ユーザーにそれを渡すことです:あなたは、ユーザーが複数の役割であることをできるようにしている場合、明らかに

// Create/Update the roles 
context.Roleses.AddOrUpdate(x => x.RoleName, 
          new Roles { RoleName = "Admin", Weightage = 3 }, 
          new Roles { RoleName = "User", Weightage = 1 } 
          ); 

// Ensure the roles are in the database 
context.SaveChanges(); 

// Fetch the "user" role 
Roles userRole = context.Roleses.Single(r => r.RoleName == "User"); 

// Create/Update the user 
context.Userses.AddOrUpdate(x=>x.EmailId, 
          new Users() { 
             FirstName = "vir", 
             LastName = "acker", 
             EmailId = "[email protected]", 
             Password = password, 
             Gender = "Male", 
             Islocked = "false", 
             CreatedDate = DateTime.Now, 
             RoleId = userRole.Id 
             } 
          ); 

、またはRoleプロパティをRolesクラスとして公開すると、値を直接割り当てることができます。

+1

Zhaph ....ありがとう –

関連する問題