1

次の構造のマスター/ディテールを挿入したいと考えています。

すべてのセールには、ID、日付、クライアント、従業員、およびセール詳細があります。すべての販売詳細には、個数と価格、そしてもちろんそのマスターとどの製品かへの参照があります。

次のコードを試しましたが、動作しません。

private void GenerarNota()
{
    EntityCollection<SalesDetail> details = new EntityCollection<SalesDetail>();

    foreach (ListItem item in _productList)
    {
        SalesDetail detail = new SalesDetail();
        detail.Product = db.Product.FirstOrDefault(p => p.Id == item.Id);
        detail.Pieces = item.Pieces;
        detail.Price = item.Price;

        details.Add(detail);
    }

    Sale sale = new Sale
    {
        Client = (Client )txtCliente.Item,
        Employee = (Employee )txtEmp.Item,
        SalesDetail = details
    };

    db.AddToSale(sale);
    db.SaveChanges();
}

私が得た例外:

オブジェクトを EntityCollection または EntityReference に追加できませんでした。ObjectContext にアタッチされているオブジェクトは、ソース オブジェクトに関連付けられていない EntityCollection または EntityReference に追加できません。

私は何か間違ったことをしていますか?オブジェクトのアタッチとデタッチについて読みましたが、試してみたところ、FK 制約違反が発生しました。

私が間違っていること、またはそれを行う別の方法があるかどうか教えてください。私はLINQで非常に新しいです。純粋なSQLで完全に実行できましたが、それについて学びたいと思いました。

4

1 に答える 1

0

detail.Product は引き続き db に関連付けられています。価格とピースもそれに関連付けられている場合があります。システムは、すべてのオブジェクトが 1 つのオブジェクト コンテキスト (データベース) にのみ関連付けられるか、完全に切り離される (EntityCollection<>) ことを保証する点で非常に厳密です。

詳細 EntityCollection を db に関連付ける必要があるか (これを行う方法がわからない)、すべてのオブジェクトを詳細に追加する前に適切に切り離す必要があります。

正直なところ、並べ替えます。最初に Sale を作成して追加し、次に Sale.SalesDetail に挿入します。

于 2013-04-02T23:25:43.970 に答える