私はEF 5でMVC 4 Code Firstを使用しており、一部のデータを正規化しようとしています。3 つのエンティティから始めて、2 つの異なるシナリオの例を示します...
ユーザーモデル
public class User
{
public int UserId { get; set; }
public string PseudoName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public Gender Gender { get; set; }
public DateTime DateOfBirth { get; set; }
// Other account related properties....
public virtual Address Address { get; set; }
public virtual Profile UserProfile { get; set; }
}
アドレス モデル
public class Address
{
public int UserLocationId { get; set; }
public int UserId { get; set; }
// Address properties
}
プロファイル モデル
public class Profile
{
public int UserProfileId { get; set; }
public int UserId { get; set; }
// Specific details about the user...
}
私は EF がトランザクションを処理する方法にあまり詳しくありません。通常、このような DB を作成し、トランザクションを起動して、ユーザーが作成されたときに、ユーザーの作成時にユーザー、プロファイル、およびアドレス レコードを作成できるようにします。EF でこの方法を実行するには、ユーザーを追加して保存し、新しく生成されたユーザーから userId を取得してから、さらに 2 つの挿入を呼び出し、アドレス/プロファイル モデルにキーを追加して保存する必要があります。途中で何かが失敗すると、ユーザーファイルが完成しないので、このようにするのはうんざりです。これが私が最初に行った方法ですが、これがDB側で受け入れられるかどうかはわかりませんが、これまでのところ問題なく機能しているようです。セカンドオピニオンが必要です。
2 番目のシナリオでは、基本的に Address モデルと Profile モデルから外部キーを削除します。コンテキストを使用して User オブジェクトを作成し、User オブジェクト内に新しい Profile/Address プロパティを作成し、オブジェクトを DB に挿入して保存します。DB 側では、FK なしで新しいプロファイル/アドレスが作成されますが、ユーザー テーブルに Profile_ProfileId、Address_AddressId として FK が追加されます。
2 番目のオプションは、最初のオプションよりも意味がありますか?