-1

複数のレイヤーを使用して WCF アプリケーションを構築していますが、DB に新しいオブジェクトを追加しようとすると、この例外が発生します。コードサンプルを提供します。ここで私を助けてください。エラーが発生していますscenaristBLL.Insert(s);

ScenaristControllerクラスで新しいScenaristオブジェクトを作成しようとしている私の方法は次のとおりです。

[HttpPost]
        public ActionResult Create(ScenaristViewModel fvm, List<int> scenarijId)
        {
            if (fvm != null)
            {
                if (String.IsNullOrEmpty(fvm.Scenarist.NameSurname) == true)
                {
                    TempData["ValidationErrorIme"] = "validation err1";
                    return RedirectToAction("Create");
                }
                if (fvm.Scenarist.DateOfBirth == null)
                {
                    TempData["ValidationErrorGodina"] = "validation err2";
                    return RedirectToAction("Create");
                }

                Scenarist s = new Scenarist();
                s.NameSurname = fvm.Scenarist.NameSurname;
                s.DateOfBirth = fvm.Scenarist.DateOfBirth;
                s.dateOfDeath = fvm.Scenarist.dateOfDeath;
                scenaristBLL.Insert(s); // PROBLEM!
                s = scenaristBLL.Fetch(s.Id);
                foreach (int scenarij in scenarijId.Where(z => z != 0))
                {
                    Scenarij scn = scenarijBLL.Fetch(scenarij);
                    if (scn == null)
                    {
                        return new HttpNotFoundResult("Nepostojeći scenaristId: " + scenarij.ToString());
                    }
                    scenarijBLL.AddToScenarist(scn, s);
                }
            }
            return RedirectToAction("Index");
        }

また、ここに View クラスがあります。

<table>
            <tr>
                <td>Name and surname:</td>
                <td>@Html.TextBoxFor(modelItem => Model.Scenarist.NameSurname) @TempData["ValidationError1"]</td>
            </tr>
            <tr>
                <td>Date of birth:</td>
                <td>@Html.TextBoxFor(modelItem => Model.Scenarist.DateOfBirth) @TempData["ValidationError2"]</td>
            </tr>
            <tr>
                <td>Datum of Death:</td>
                <td>@Html.TextBoxFor(modelItem => Model.Scenarist.DateOfDeath) @TempData["ValidationError3"]</td>
            </tr>
        </table>

DateOfBirth と DateOfDeath が問題になる可能性があると思います。これらは DateTime 形式であるためです。ユーザー入力から DateTime 形式を取得する方法がわかりません。単なる推測で、実際にはわかりません。

さらに、ここに他のレイヤーがあります... BLL:

public void Insert(Scenarist scenarist)
{
    string error;
    if (scenarist.Validate(out error) == true)
    {
        string[] nameSurname = scenarist.NameSurname.Split(' ');
        string name = nameSurname[0];
        string surname = nameSurname[1];
        dal.Insert(name, null, surname, scenarist.DateOfBirth, scenarist.DateOfDeath);
    }
    else
    {
        throw new ArgumentException("Validation error: " + error);
    }
}

ダル:

public void Insert(string name, string middleName, string surname, 
    DateTime? dateOfB, DateTime? dateOfD)
{
    using (RPPP111Entities ctx = new RPPP111Entities())
    {
        Scenarist scenarist = new Scenarist();
        scenarist.Person.Name = name;
        scenarist.Person.Middlename = middleName;
        scenarist.Person.surname = surname;
        scenarist.Person.DateOfB = dateOfB;
        scenarist.Person.DateOfD = dateOfD;
        ctx.Scenarist.Add(scenarist);
        ctx.SaveChanges();
    }
}
4

2 に答える 2

1

おそらくscenarist.NameSurname(挿入関数) は null です。ビューにはmodelItem => Model.Scenarist.NameSurnameScenarist.

編集:
デバッグ チュートリアル: http://www.youtube.com/watch?v=C0vDKXIq_9A

EDIT2:
in のインスタンスを作成しましたかPerson(DAL 関数を挿入):

scenarist.Person.Name
于 2013-06-24T23:29:34.733 に答える
0

を押したときに問題が本当に発生する場合、scenaristBLL.Insert(s); // PROBLEM!これが発生する唯一の方法は、scenaristBLL が null の場合です。おそらく、Insert は静的関数であり、scenaristBLL は抽象クラスである必要があります。

これは、実行して確認できます。エラーが発生したら、scenaristBLL の上にマウスを置きます。null の場合は表示されます。

それに気づいてくれた@Matt Johnsonに感謝します。

于 2013-06-24T23:58:01.997 に答える