0
私は以下のような1対多テーブルを持っています。次のコードで既存の行を編集する際に問題が発生しています。私はETの関係にはかなり新しいので、詳細な説明は非常に高く評価されることを理解してください。なぜそれがヌル値を返すのですか?Entity Frameworkを使用して既存の行を更新する方法は?
public void UpdateReportGroup(TReportHeaderModel model)
{
if (model.THeaderTitle == null)
{
throw new Exception("Report Group Title must be filled in");
}
if (model.THeaderTitle.Length <= 0)
{
throw new Exception("A Report Group Title must be filled in.");
}
using (var connection = new TReportEntitiesConnection())
{
var header = connection.THeaders.SingleOrDefault(f => f.ID == model.ID);
var reports = connection.TReport.Where(f => f.THeaderID == model.ID);
connection.TReport.RemoveRange(reports);
foreach (var urls in model.TReports)
{
connection.TReport.Add(new TReport()
{
TReportName = urls.name,
URL = urls.url,
});
}
connection.THeaders.Add(header);
connection.SaveChanges()
}
}
毎回、私はそれがトレポー 'テーブルにnull値を与えて、それをデバッグします。 私の新しい行の作成は、次のコードで完全に機能します。意味、私は正しいフィールド名で正しいフォームを返しています。
あなたが見ることができるように、私はDIパターンを以下の午前、そして以下のようにので、私は私のコントローラでこれらの2つのメソッドを呼び出していますpublic void CreateReport(TReportHeaderModel model)
{
if (model.THeaderTitle == null)
{
throw new Exception("Report Group Title must be filled in");
}
if (model.THeaderTitle.Length <= 0)
{
throw new Exception("A Report Group Title must be filled in.");
}
using (var connection = new TReportEntitiesConnection())
{
var header = new THeader()
{
ClientID = model.ClientID,
THeaderTitle = model.THeaderTitle,
RowNumber = model.RowNumber
};
foreach (var urls in model.TReports)
{
header.TReports.Add(new TReport()
{
TReportName = urls.name,
URL = urls.url
});
}
connection.THeaders.Add(header);
connection.SaveChanges();
}
}
:私はそれは私がしたい最後の時間になると思い
[HttpPost]
public ActionResultModel CreateReportAPI([FromBody] TReportHeaderModel model) //attempt 3
{
try {
if (ModelState.IsValid)
{
var isValid = _tReportingService.HeadernameExists(model.THeaderTitle);
if (!isValid)
{
Console.WriteLine("it does not exist");
var user = this.GetCurrentUserAccount();
model.ClientID = user.SelectedClient.ID;
_tReportingService.CreateReport(model);
}
else //Update method comes till here and it goes //straight to the error
{
Console.WriteLine("it exists");
var user = this.GetCurrentUserAccount();
model.ClientID = user.SelectedClient.ID;
_tReportingService.UpdateReportGroup(model);
}
}
return new ActionResultModel()
{
Success=true,
Message="Report Group Successfully Saved."
};
}
TReport取得のWhereステートメントの後にToList()を追加してみてください。 – master2080
@ master2080しました。それでも私はエラーを与えています。 –
1つまたは複数のエンティティの検証に失敗しましたというエラーメッセージが表示されます。詳細については、 'EntityValidationErrors'プロパティを参照してください。 –