私はFileエンティティとエンティティを持っていUserます。エンティティは、というプロパティを通じてエンティティFileと 1:1 の関係を持ちます(これは、ファイルを最後に変更したユーザーを記録します)。という名前のエンティティ内にもフィールドがあり、これは実際の FK リレーションシップです。リレーションシップは一方向です。エンティティには、エンティティに戻るナビゲーション プロパティがありません。UserLastChangeUserFileLastChangeUserIdUserFile
class File
{
public int Id { get; set; }
public int? LastChangeUserId { get; set; }
public virtual User LastChangeUser { get; set; }
}
class User
{
public int Id { get; set; }
}
Fileが変更された場合、に を設定する必要がLastChangeUserありFileます。完全な User オブジェクトではなく、ユーザーの ID しか持っていません。だから、私はこれをやっています:
file.LastChangeUser = null;
file.LastChangeUserId = userId;
Fileこれは、オブジェクトが新しく作成されたときにファイルを作成する際に機能するようです (エンティティ コレクションに追加される POCO)。
Fileただし、オブジェクトが DB から (プロキシとして) 取得された既存のオブジェクトである場合、ファイルの更新時には機能しません。
後者の場合、LastChangeUserIdフィールドの DB で NULL になります。(SaveChanges の呼び出し後、オブジェクトはとフィールドnullの両方に含まれます)。LastChangeUserLastChangeUserId
多分私はここで間違ったことをしているだけですか?正しい方法は何ですか?プロパティUserを設定するためにオブジェクトを取得する必要がありますか?LastChangeUser