我在控制器中有方法
它从发布请求接收数据并写入表
这是代码
[ResponseType(typeof(TimeTable))]
public IHttpActionResult PostTimeTable(TimeTable timeTable)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (ModelState.IsValid)
{
DateTime dt = DateTime.Today;
TimeTable c = (from x in db.TimeTables
where x.Company == timeTable.Company && x.INN == timeTable.INN
select x).First();
c.StartPause = timeTable.StartPause;
c.StartDay = timeTable.StartDay;
c.EndPause = timeTable.EndPause;
c.EndDay = timeTable.EndDay;
db.SaveChanges();
}
db.TimeTables.Add(timeTable);
db.SaveChanges();
return CreatedAtRoute("DefaultApi", new { id = timeTable.Id }, timeTable);
}
但是当INN和公司的记录已经在db。
时,它运作良好但如果它不在数据库中,我需要创建新的条目。
我如何修改此方法?
答案 0 :(得分:1)
您可以使用标记(exisingCompanyFlag
)进行编辑模式或像这样添加新模式
bool existingCompanyFlag = true;
TimeTable c = (from x in db.TimeTables
where x.Company == timeTable.Company && x.INN == timeTable.INN
select x).FirstOrDefult();
if (c == null)
{
existingCompanyFlag = false;
c = new TimeTable();
}
c.StartPause = timeTable.StartPause;
c.StartDay = timeTable.StartDay;
c.EndPause = timeTable.EndPause;
c.EndDay = timeTable.EndDay;
if (!existingCompanyFlag)
db.TimeTables.Add(c);
答案 1 :(得分:1)
您的代码中需要一个单独的分支用于插入案例。
if (ModelState.IsValid) {
if (addingNewRow) {
TimeTable tt = new TimeTable {
// Populate properties (except identity columns)
};
db.TimeTables.Add(tt);
} else {
// update
}
db.SaveChanges();
}
要链接到其他实体,请使用以下方法之一:
分配实例:
x.Company = theCompany;
或者,指定实例ID
x.CompanyId = companyId;
(如果您已经加载了其他实体或者正在创建它,#1会更容易 - EF会对ID进行排序 - 而#2会加载整个其他实体。)