0

次の表から始めました。1 つはスタッフ名用、もう 1 つは挨拶用です。

public class PrmTbl_Salutation
{
    public int ID { get; set; }
    public string Desc { get; set; }
    public bool Active { get; set; }

    public PrmTbl_Salutation(int id, string desc, Boolean active)
    {
        ID = id;
        Desc = desc;
        Active = active;
    }

    public PrmTbl_Salutation() { }
}

public class PrmTbl_Staff
{
    public int ID { get; set; }
    public int SalutationID { get; set; }
    public string Name { get; set; }
    public bool Active { get; set; }

    public PrmTbl_Staff(int id, int salID, string name, Boolean active)
    {
        ID = id;
        SalutationID = salID;
        Name = name;
        Active = active;
    }

    public PrmTbl_Staff() { }
    public PrmTbl_Salutation Salutation { get; set; }

}

テーブルごとに個別のビューがありましたが、それらを組み合わせて、スタッフ名の前に関連する挨拶が表示されるようにしたいと考えました。ビューには、現在のスタッフの編集可能なリストがフォームとして含まれ、新しいスタッフ レコードを挿入する別のフォームが含まれます。これはViewModelです:

public class StaffSalutation
{
    public int StaffID { get; set; }
    public string Name { get; set; }
    public string Salutation { get; set; }
    public int SalutationID { get; set; }
    public bool Active { get; set; }

    public List<PrmTbl_Salutation> SaltsList { get; set; }
}

更新機能は正常に機能します。

PrmTbl_Staff thisRow = staffDB.PrmTbl_Staffs.Find(id);

string tempName = Convert.ToString(UpdateArray[thisName]);
Boolean tempActive = Boolean.Parse(UpdateArray[thisActive]);
int tempSalID = Convert.ToInt32(UpdateArray[thisSalID]);

thisRow.Name = tempName;
thisRow.Active = tempActive;
thisRow.SalutationID = tempSalID;

staffDB.SaveChanges();

...しかし、挿入は失敗します

string tempName = Convert.ToString(staff["name"]);
int tempSalID = Convert.ToInt32(staff["saltID"]);
PrmTbl_Staff thisRecord = new PrmTbl_Staff(0, tempSalID, tempName, true);
staffDB.PrmTbl_Staffs.Add(thisRecord); //FAILS HERE
staffDB.SaveChanges();
return RedirectToAction("Staff");

エラーでThe INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.PrmTbl_Staff_dbo.PrmTbl_Salutation_SalutationID". The conflict occurred in database "LibraryBase2.DAL.LibraryContext", table "dbo.PrmTbl_Salutation", column 'ID'. The statement has been terminated.

ViewModels を使用するのはこれが初めてです。サリュテーション ID と新しいスタッフ ID に関して、あいまいさまたは矛盾があるようです。私は何を間違っていますか?どんな助けでも大歓迎です。

4

2 に答える 2

0

SalutationIDデータベースに存在しない値を設定しているようです。さらに、エラーがインラインで発生していると確信していますかAdd。通常、Entity フレームワークは、SaveChangesメソッドを呼び出すときにこれらのエラーを発生させます。

于 2013-10-10T18:23:12.720 に答える