EF-Code-First を使用して、ASP.Net 4.0+ で OOTB に付属する組み込みの Simple Membership プロバイダーに (1-1) 関連する DB テーブルをセットアップしたい
AccountModels.cs の UserProfile クラスは、単純な 2 つのフィールド クラスです。
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
}
別に保持したい他のユーザー情報を含む私のクラスは、次の形式です。
[Table("UserInfo")]
public class UserInfo
{
[Key]
public int ID { get; set; }
<user info fields here...>
public virtual UserProfile UserProfile { get; set; }
}
コンテキストは次のとおりです。
public class UsersContext : DbContext
{
public UsersContext()
: base("DefaultConnection")
{
}
public DbSet<UserProfile> UserProfiles { get; set; }
public DbSet<UserInfo> UsersInfo { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<UserInfo>()
.HasRequired(u => u.UserProfile)
.WithRequiredPrincipal();
}
}
今、他に何も変更せずに、アプリを実行するとモデルは正常にビルドされますが、WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
実行時にエラーが発生します (Acct Controller Line 82)。The INSERT statement conflicted with the FOREIGN KEY constraint "UserInfo_UserProfile".
後で DB から直接参照できるようにしたいユーザー情報を保存する (想定される) 好ましい方法は何ですか (つまり、古いプロファイル プロバイダーのように blob ではありません)。
リポジトリ レイヤーを介してすべてを実行するのではなく、EF-CodeFirst を使用してこれを設定するにはどうすればよいですか? リポジトリルートに進むべきですか?
その方法をテストしたときに、azureSQL で UserProfile テーブルにより多くの列を含めることができなかったので、userInfo のものを UserProfile から除外したいと思います。
ありがとう