0

この挿入メソッドでNULL例外が発生することがある理由を誰かが説明できますか?言われたように、たまにしかありませんが、それは私にとってさらに混乱を招きます。

テーブルOrderLineには、datacontext(.dbmlファイル)内のテーブルProductへの参照があります。

public void insertNewOrder(string accountNumber, int orderId)
{
    var order = orderRep.GetOrderById(orderId);
    var orderlineData = orderLineRep.GetOrderLines(order.OrderID);

    foreach (var orderLine in orderlineData)
    {
        int currentStatus = dlvRep.getAxOrderStatusNumber(orderLine.ItemNumber, 0);
        string levering = "";
        string status = dlvRep.getAxOrderStatus(orderLine.ItemNumber, currentStatus, out levering);
        WebsiteOrderStatus insertNew = new WebsiteOrderStatus
        {
                AccountNumber = accountNumber,
                OrderID = orderId,
                ItemNumber = orderLine.ItemNumber,
                ItemName = orderLine.Product.Name,
                FormatName = orderLine.Product.ProductFormatName,
                Quantity = orderLine.Quantity,
                Price = orderLine.Price,
                Status = status,
                Levering = levering,
                LastUpdatedStatus = currentStatus,
                CreatedDate = DateTime.Now
        };
        db.WebsiteOrderStatus.InsertOnSubmit(insertNew);
        db.SubmitChanges();
    }
}

例外メッセージ:

Cannot insert the value NULL into column 'FormatName', table 'GWportal.dbo.WebsiteOrderStatus'; column does not allow nulls. INSERT fails.

ステートメントは終了されました。

このコードがProductFormatNameを見つけるのに問題がある製品を検索すると。ProductFormatNameの値はNULLではなく、期待どおりの値になっています(例: "PS3")。

もう一つの奇妙なことは、なぜそれは不平を言っていないのですか?

ItemName = orderLine.Product.Name,

この列はnullも許可しません。

4

1 に答える 1

2

が に設定されるorderLineRep.GetOrderLines(order.OrderID)原因は、おそらくコードのバグです。orderLine.Product.ProductFormatNamenull

いくつかのデバッグ コードを追加してみてください。

    foreach (var orderLine in orderlineData)
    {
        if (orderLine.Product.ProductFormatName == null) {
            throw new Exception("ProductFormatName == null");
        }

        // ...

もう1つの奇妙なことは、なぜ文句を言わないのですか:

ItemName = orderLine.Product.Name,

この列もヌルを許可しません。

私は2つの説明を考えることができます:

  1. orderLine.Product.Namenull ではありません。上記のバグは のみに影響する可能性がありProductFormatNameます。
  2. orderLine.Product.Nameは null ですが、ステートメントをすぐに終了するには、1 つのエラーで十分です。1 つのエラーのみが報告されます。存在するその他のエラーは、最初のエラーが修正されるまで報告されません。
于 2012-04-28T13:17:28.570 に答える