私は2つのクラスを持っています。最初のものはこれです:エンティティフレームワークのコードを最初に:どのように "プリンシパル"と同じIDの概念を使用しない1対1の関係を設定するには?
public class User
{
public int Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string Name { get; set; }
public DateTime Birth { get; set; }
public Sex Sex { get; set; }
public List<Album> Albums { get; set; }
public DateTime Created { get; set; }
public Picture ProfilePicture { get; set; }
}
そしてもう一つはこれです:
public class Picture
{
public int Id { get; set; }
public Album Album { get; set; }
public string Path { get; set; }
public string Description { get; set; }
public DateTime Created { get; set; }
public User User { get; set; }
}
写真をテーブルに保存されている、と彼は内部のアルバムを好きなユーザーは、できるだけ多くの画像を持つことができ、それらはアルバムを使ってアクセスする。ここでAlbum
クラスがあります:
Picture
オブジェクトを持つ
public class Album
{
public int Id { get; set; }
public User User { get; set; }
public AlbumType Type { get; set; }
public List<Picture> Pictures { get; set; }
public string Name { get; set; }
public DateTime Created { get; set; }
}
、私は現在、作品picture.User
ようなことを、やって、その絵のUser
所有者を取得することができるようにしたいです。しかし、それらの写真の1つだけがプロフィール画像になります。プロフィールの写真はほとんど常に取得されているので、私はこのようなコードを何かに行うことができるようにしたいと思います:
LoadPicture(user.ProfilePicture.Id);
私の問題は、EFは、私はI 1対1の関係を作成したいと考えていることですプリンシパルを定義しなければならず、両方のエンティティは同じIDを持つ必要があります。 Picture
のエンティティは独自のIDを持っていなければなりません。User
も独自のIDを持っている必要があります。それをEFにどうすればいいのですか?user.ProfilePicture.Id
はどうですか?
ご協力いただければ幸いです。
データベースモデルを変更できないことを正しく理解していますか? –
@GertArnoldこれは変更できます。アイデアは、ユーザーのレコードに自分のプロフィール画像のIDを書き込み、コードでは、 'user.ProfilePicture'のようなコード行で画像オブジェクトを取得できるようにすることです。言い換えれば、ピクチャテーブルに 'User'というIDを持つ外部キーの代わりに' Picture'のIDを持つ外部キーがuserテーブルにあり、 'user.ProfilePicture'を書くことができるはずです。私は最初にコードでそれを行う方法を知らない。多分それはできないかもしれません。ちょうどEFで、たぶん、そうですが、コードでは最初はおそらくいいでしょう。 – amedina