0

我有以下内容:

    if (chemexist == false) // conditionally creating WtrChem record
    {
      WtrChem wc = new WtrChem();
      wc.Contact = "John Smith";
      ..
      wc.Phone = ("800-888-9988");
      Db.WtrChem.Add(wc);
      Db.SaveChanges();
    }


    WtrChemDetail psw = new WtrChemDetail (); // creating details record for WtrChem
    psw.Comments = comment;
    ..
    .. 
    Db.WtrChemDetail.Add(psw);
    Db.SaveChanges();

代码将首先创建主记录,然后创建详细记录。我有什么作品。我想知道在最佳实践方面是否有更有效的方法来完成我上面的工作。

4

1 回答 1

0

您可能希望对此进行建模,其中细节是主节点上的一个属性。

可能是这样的:

// Get the item. Include makes sure that you get the referenced detail as well.
WtrChem wc = Db.WtrChem.Include(x => x.Detail).SingleOrDefault();

if (wc == null) // creating WtrChem record
{
   // If it wasn't found, create and add
   wc = new WtrChem();
   Db.WtrChem.Add(wc);
}

wc.Contact = "John Smith";
..
wc.Phone = ("800-888-9988");

// Deal with the 
WtrChemDetail psw = new WtrChemDetail (); // creating details record for WtrChem
psw.Comments = comment;      
wc.Detail = psw;

Db.SaveChanges();

如果使用这种方法,主从之间的引用将自动排序。

您需要添加 using 语句才能使.Include(..)lambda 工作:

using System.Data.Entity;
于 2012-09-26T21:44:44.480 回答