0

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 から除外したいと思います。

ありがとう

4

1 に答える 1

1

 modelBuilder.Entity<UserInfo>()
                    .HasRequired(u => u.UserProfile)
                    .WithRequiredPrincipal();

UserProfile クラスには UserInfo が必要であることを意味します。SimpleMembership は UserInfo ではなく UserProfile に挿入されるため、例外がスローされます。

あなたの関係はオプションであるため、頭の上からこれが必要だとは思いません-userInfoを作成する前にsimplemembershipが作成するため、UserProfileはUserInfoの前に存在します。

http://social.msdn.microsoft.com/Forums/en/adonetefx/thread/257f33d2-9870-46ce-9b0b-147935162a0c

于 2012-11-15T06:18:54.797 に答える