1

新しいオブジェクトを DB に挿入するとき、別のデータベース ルックアップを実行して、別のオブジェクトとの関係に結び付けます。効率のためにこの余分な手順を削除したいと思います。IE ID だけを使用して別の関係を設定するにはどうすればよいですかDBからオブジェクト全体を取得するのではなく? 例えば:

Car C = new Car();
C.Person = db.person.find(PersonID); //unnecessary lookup
//I'd like to do: C.setPersonID(personID);
db.cars.add(C);
db.saveChanges();

どこでモデル:

class Car
{
   public virtual Person Person { get; set; }
}
4

3 に答える 3

2

1 対 1 の関係であると仮定すると、次のようにすることができます。

public class Car
{
    public int Id { get; set; }
    public int PersonId { get; set; }
    public Person Person { get; set; }
}

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class CarConfiguration : EntityTypeConfiguration<Car>
{
    public CarConfiguration()
    {
        HasKey(i => i.Id);
        HasRequired(i => i.Person).WithMany().HasForeignKey(i => i.PersonId).WillCascadeOnDelete(false);
    }
}

次に、その人物の Id のみを使用し、その ID を持つ人物が存在すると仮定して、その人物がいる新しい車を追加するには、次のようにします。

using (var ctx = new CarContext())
{
    var car = new Car();
    car.PersonId = 5;
    ctx.Cars.Add(car);
    ctx.SaveChanges();
}

このリンクは役に立つかもしれません。

于 2013-02-02T00:17:03.770 に答える
0

外部キーを使用し、それに応じて外部キー プロパティを設定します。

于 2013-02-02T00:17:55.600 に答える
0

確認のためにこれを実行していませんが、Entity Framework で使用される規約ベースの ID システムがあると思います。これにより、発生したくないことが自動的に行われる可能性があります。

class Car
{
   public virtual Person Person { get; set; }
   public virtual Int32   PersonID { get; set; }
}

以前にこれを見た NerdDinner プロジェクト ( http://nerddinner.codeplex.com/ )からコードを投稿するつもりでしたが、かなり属性を含んだコードであるため、調べることができます。

于 2013-02-05T08:01:23.607 に答える