1

メンバーシップ propvider を再実装し、元の DB スキームを維持したいと考えています。私は2つのクラスを持っています:

class UserProfile
{
  public int UserId {get;set}   //PK
......
}

class Membership
{
  public int UserId {get;set;}  //FK to UserProfile.UserId
.........
}

ここで、FluentAPI を使用して、Membership.UserId を FK として UserProfile.UserId にアタッチし、Membership テーブルの PK にもしたいと考えています。

UserProfile.UserId は DB で生成された ID であり、決して繰り返されないことを保証できます。次のコードを試しましたが、移行の作成中にエラーで失敗しました:

型の各プロパティ名は一意である必要があります。プロパティ名 'UserId' は既に定義されています。

HasKey(k => k.UserId);                        //Declare it as PK           !!!!
Map(m => m.ToTable("webpages_membership"));   //Setup table name

HasRequired(t => t.User)                        //Nav.property to the UserProfile
    .WithRequiredDependent(t1 => t1.Membership) //Rev.nav.property from the UserProfile
    .Map(m => m.MapKey("UserId"));              //FK to the UserProfile    !!!!

感嘆符でマークされた行を削除すると、移行は正常に作成されましたが、列名が間違っていました。

4

1 に答える 1

0

これはあなたが求めているものだと思います...

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
...
modelBuilder.Entity<Membership>()
    .HasKey(x => new { x.UserId });

modelBuilder.Entity<Membership>()
            .HasRequired(x => x.User)
            .WithOptional(x => x.Membership);

エンティティと...

public class UserProfile
{
    [Key] public int UserId { get; set; }
    public Membership Membership { get; set; }
}
public class Membership
{
    public int UserId { get; set; }
    public UserProfile User { get; set; }
}

...または.WithOptional();、ユーザーにメンバーシップ ナビゲーション プロパティをドロップしたい場合。

于 2013-04-01T22:31:56.930 に答える