0

nhibernate では、「Load」または「Get」を使用して「Id」を取得し、それをドメイン モデルにロードできます。EFでそのようなことをどのように行いますか?

クライアントからサーバーに送信する「ID」がいくつかあります。新しいアイテムを取得して、実際にデータベースから取得することなく、それらを新しいアイテムに関連付けたいと思います。

nhibernateでは、私はこのようなことをします

public void MyMethod(int brandId, string productName)
{
   Product p = new Product()
   {
        Name = productName,
        Brand = session.Load<Brand>(brandId)
   };

   session.Save(p);
   session.Commit();
}
4

2 に答える 2

0

Entity Framework を使用して、モデルで属性装飾を使用します

public class DbEntity
{
    [Key, DatabaseGenerated()]
    public Guid Id {get;set;}
}

public class Product : DbEntity
{
   public string Name {get;set;}
   public virtual Brand Brand {get;set;}
}

public class Brand : DbEntity
{
   public string Name {get;set;}
}

遅延読み込みに使用virtualします。Cascade On Delete が必要かどうかによって、Guid BrandIdそこに配置するかどうかが決まります。

私の他の質問と回答を見て、関連付けとは何かを確認してください

レコードとクラッドを取得するために、次のクラスがあります。

  • DbContextSystem.Data.Entity から継承するコンテキスト(と思います)
  • Context をインスタンス化するを使用するリポジトリ
  • ninjected の IRepository

この保存方法があるリポジトリにあります。

public void SaveEntity<TEntity>(TEntity entity) where TEntity : DbEntity
{
   if (entity.Id.Equals(Guid.Empty))
      _context.Set<TENtity>().Add(entity);
   else
      _context.Entry(entity).State = Modified;

   _context.SaveChanges()
}

public void DeleteEntity<TEntity>(TEntity entity) where TEntity : DbEntity
{
   _context.Set<TEntity>().Remove(entity);

   _context.SaveChanges();
}

このように、エンティティをいくつでも追加でき、必要な保存と削除のメソッドは 1 つだけです。

于 2013-05-22T18:38:53.260 に答える
0

答えは、使用している Entity Framework のバージョンによって異なります。

EF > 4 では、 の概念FK Associationが追加されました。これは、エンティティに というプロパティがある場合BrandId、それをそのまま使用できることを意味します。詳細については、こちらを参照してください。

Product p = new Product()
{
    Name = productName,
    BrandId = brandId
};

Code First を使用している場合は、プロパティと共にモデルでこのプロパティを定義できますBrand。詳細については、こちらを参照してください。

public class Product {
    public string Name { get; set; }
    public int BrandId { get; set; }
    public virtual Brand Brand { get; set; }
}

データベースからモデルを作成している場合は、デザイナーで ID プロパティを保持するオプションを設定できます。

EF < 4 では、値に基づいてエンティティ キーを作成する必要があります。詳細については、この質問を参照してください。

Product p = new Product() {
    Name = productName
};
p.BrandReference.EntityKey = new EntityKey("MyEntities.Brand", "BrandId", brandId);
于 2013-05-22T18:26:03.117 に答える