2

次のように、 Entity Framework 5 Code Firstを使用して1 対 1 の関係をマッピングしたいと思います。

public class User
{
     public Guid Id { get; set; }
}

public class Profile
{
     public User Owner { get; set; }
}

データベースのProfile テーブルスキーマには、Usersテーブルの外部キーである主キー があることに注意してください。UserId

Profiles テーブルで人為的な識別子を避けることができるかどうか知りたいです。

前もって感謝します!



アップデート

まあ、Erangahvdの両方の答えが役に立ちそうです。いくつかの貢献により、所属するプロファイルを持つユーザーを作成するトランザクションが成功しました。

  • hvd =>オブジェクト モデルに人為的な識別子は必要ありません
  • Erlanga => あなたのアプローチは機能しますが、データベースに [Id] 列を作成する必要があります

データベーステーブルでも人工的な識別子を回避する方法を見つけた人はいますか?

4

2 に答える 2

3

流暢なAPIを使用して関係をマッピングします。

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {
     modelBuilder.Entity<Profile>()
        .HasRequired(p => p.Owner)
        .WithOptional();
 }

アップデート:

1対1の関係は、「共有主キー」と呼ばれるマッピング手法を使用してのみモデル化できます。つまり、依存エンティティのPKもFKです。独立したエンティティ(つまり)のPK値を参照するため、依存するエンティティ(つまり)に関係する人工的な識別子はありません。ProfileUser

于 2012-08-02T07:55:45.560 に答える
2

これが私のやり方です(状況に合わせてクラスの名前を変更しました):

public class User
{
    public Guid Id { get; set; }
    public Profile Profile { get; set; }
}

public class Profile
{
    public Guid OwnerId { get; set; }
    public User Owner { get; set; }
}

var userConfiguration = modelBuilder.Entity<User>();
userConfiguration.HasKey(u => u.Id);
userConfiguration.HasOptional(u => u.Profile).WithRequired(p => p.Owner);

var profileConfiguration = modelBuilder.Entity<Profile>();
profileConfiguration.HasKey(p => p.OwnerId);
profileConfiguration.HasRequired(p => p.Owner).WithOptional(u => u.Profile);

は、 である主キーにマップする必要があるHasOptional(u => u.Profile).WithRequired(p => p.Owner)EFに通知します。またはプロパティなしでこれを機能させることができるはずですが、これは私にとってはうまくいくものであり、これらのプロパティをさらに構成することができます。p.OwnerOwnerIdOwnerIdProfile

于 2012-08-02T09:08:19.723 に答える