0

SimpleMembershipProvider によって自動的に作成されたデータベースを再実装します。実際、リンクしている 2 つのテーブルについて質問があります。

create table user_profiles
(
  id       int not null identity, /* PK */
  username varchar(128) not null,
  .........
);

create table membership
(
  userid int not null,   /* FK to user_profile. */
  ..............
);

最初の POCO クラス間の関係を作成したいと思います。

public class UserProfile : BaseType
{
    public virtual Membership Membership { get; set; }
    ......
    public string UserName { get; set; }
    ......
}

public class Membership
{
    public virtual int UserId { get; set; }
    public virtual UserProfile User { get; set; }
    ......
}

Membershipプロパティで PK として使用され、UserIdデータベースで FK と同時に使用されます。次の構成を試しました:

public class UserProfileConfiguration : EntityTypeConfiguration<UserProfile> {
    public UserProfileConfiguration() {
        HasKey(k => k.Id);
        Map(m => m.ToTable("user_profiles"));

        HasRequired(t => t.Membership)
            .WithRequiredPrincipal(t1 => t1.User)
            .Map(m => m.MapKey("userid"));
        ....
    }
}

public class MembershipConfiguration : EntityTypeConfiguration<Membership> {
    public MembershipConfiguration() {
        HasKey(k => k.UserId);
        Map(m => m.ToTable("webpages_Membership"));

        //Property(x => x.UserId).HasColumnName("userid");
    }
}

(サンプルのように)行をMembershipConfigurationコメントアウトするとAdd-Migration、移行コマンドで 2 つのレコードが作成されます。

c => new {
  UserId = c.Int(nullable: false, identity: true),
  .............
  userid = c.Int(nullable: false),

コメントを外すと、コマンドがエラーメッセージで失敗しましたEach property name in a type must be unique. Property name 'userid' was already defined.

列「userid」をPKおよびFKとして同時に使用して、必要な結果を要求するにはどうすればよいですか?

4

0 に答える 0