1

だから私はこのように2つのモデルをセットアップしています:

class Job { ... List<Restriction> userRestrictions {set; get; ... }

2番目のモデル:

Restriction { public int Id { get; set; } ... public int JobID { get; set; } }

ここで、ジョブを編集するときに、次の方法で制限を取得します。

job = db.Jobs.Where(i => i.Id == id).Include(r => r.UserRestrictions).First();

したがって、UserRestrictions を反復処理して手動で作成します。

        @for (ind = 0; ind < Model.UserRestrictions.Count; ind++)
        {
            JaASv1.Models.Restriction p = Model.UserRestrictions[ind];
        <tr>
            <td>
                <input type="hidden" name="UserRestrictions[@(Counter + ind)].Id" value="@p.Id" />
                <input type="hidden" name="UserRestrictions[@(Counter + ind)].JobId" value="@Model.Id" />
            </td>

私の投稿方法:

            public ActionResult Edit(Job job, string ProjTypeOther, string VenderOther, string FoldingOther, string BindingOther)
            ...
            db.Entry(job).State = EntityState.Modified;
            ...
            for (int iter = iterStart; iter >= 0; iter--)
            {
                Restriction r = job.UserRestrictions[iter];

                db.Entry(r).State = EntityState.Modified;

                if (r.Permissions == 0)
                {
                    DelPermission(sPath, r.AdName); // Folder Permission things
                    job.UserRestrictions.Remove(r);

                    continue;

                }
                else if (r.Permissions == 1 )
                {
                    AddPermission(sPath, r.AdName, readRights); // Folder Permission things
                }
                else if (r.Permissions == 2)
                {
                    AddPermission(sPath, r.AdName, writeRights); // Folder Permission things
                }



            }

            db.SaveChanges();

db.SaveChanges() で次のエラーが発生します。

1 つ以上の外部キー プロパティが null 非許容であるため、リレーションシップを変更できませんでした。

すべての job.UserRestrictions を調べて、すべてに JobID が投稿されていることを確認します。データベース コンテキストを調べたところ、NULL を含む外部キーがないことがわかったので、このエラーが何を話しているのかわかりません。約。

私は何か間違ったことをしているのだろうか?

各制限状態を Modified に設定してみました。それはうまくいかなかったようです。

私はどんな提案にもオープンです。

ありがとう!

4

1 に答える 1

0

だから、私がやったことは次のとおりです:

現在データベースにあるすべての UserRestrictions をプルします。

投稿データを反復処理する際に、データベース内の対応するアイテムを確認します。また、Post オブジェクトの UserRestrictions を null に設定して、ASP がテーブルに再挿入しようとしないようにしています。

アイテムが存在しない場合は、そのアイテムをデータベースに追加します。

投稿データではなく、データベースからアイテムを変更します。

ASP.NET がすべてを処理してくれることを期待していましたが、ASP.NET がすべてを処理してくれるとは思えません。

List<Restriction> fromDB = db.Restrictions.Where(r => r.JobId == job.Id).ToList();
List<Restriction> newPost = job.UserRestrictions;
job.UserRestrictions = null;
for (int iter = iterStart; iter >= 0; iter--) {
... // Logic to handle post item
    Restriction b;
    try
    {

         b = fromDB.Where(f => f.Id == r.Id).First();
     }
     catch (Exception er)
     {
         // No record exists yet
         b = r;
         db.Restrictions.Add(b);
      }
      // Modify values of b to the values from post data
    }
  db.SaveChanges();

奇妙なインデントで申し訳ありません.StackOverflowは空白の代わりにbbcodeを使用する必要があります:x

于 2013-02-19T18:53:10.053 に答える