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として同時に使用して、必要な結果を要求するにはどうすればよいですか?