PUT 不会在 SQL Server 中插入对象
本文关键字:插入 对象 Server SQL PUT | 更新日期: 2023-09-27 18:32:12
我在使用 Web API 时遇到了问题,我想在 SQL Server 中创建一个新对象。PUT 方法用于更新费用明细。费用明细表包含每日费用明细。每日费用明细包含个人费用。
在 GUI 中,编辑其费用注释的用户可以:
- 用值> 0 填写空的单个支出(创建新的单个支出) 更改现有个人费用
- (更新现有个人费用)
- 将单个支出/更改值清除为 0(删除现有的单个支出)
在此之后,用户单击保存,整个费用说明将通过 ajax 调用发送到 Web 服务。Nr 2 和 Nr 3 按预期工作,但 Nr 1 不起作用且没有错误。
普特方法
// PUT api/expenses/5
public void Put(int id, [FromBody]Expensenote exUpdate)
{
expensenote ex = (from e in db.expensenotes
where e.ID == id
select e).FirstOrDefault();
if (ex == null)
{
//return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Request was not found.");
}
else
{
foreach (Expensenotedaily d in exUpdate.dailyExpenses)
{
var daily = ex.expensenotedailies.SingleOrDefault(da => da.ID == d.ID);
daily.city = d.city;
daily.dailyallowance = d.dailyallowance;
foreach (Expenseindividual i in d.individualExpenses)
{
expenseindividual individual = daily.expenseindividuals.SingleOrDefault(ind => ind.ID == i.ID);
if (i.value == 0)
{
if (!(individual == null))
{
db.expenseindividuals.Remove(individual);
}
}
else
{
if (!(individual == null))
{
individual.value = i.value;
}
else
{
expenseindividual newInd = db.expenseindividuals.Create();
newInd.typecode_ID = i.expensetypeID;
newInd.daily_ID = daily.ID;
newInd.typecode = db.typecodes.SingleOrDefault(t => t.ID == i.expensetypeID);
newInd.expensenotedaily = daily;
newInd.value = i.value;
newInd.creditcard = false;
db.expenseindividuals.Add(newInd);
//SOLUTION: db.SaveChanges();
}
}
}
}
db.SaveChanges();
}
}
费用单个数据模型类
public partial class expenseindividual
{
public expenseindividual()
{
this.supplementalinfoes = new HashSet<supplementalinfo>();
}
public int ID { get; set; }
public double value { get; set; }
public bool creditcard { get; set; }
public int daily_ID { get; set; }
public int typecode_ID { get; set; }
public virtual expensenotedaily expensenotedaily { get; set; }
public virtual typecode typecode { get; set; }
public virtual ICollection<supplementalinfo> supplementalinfoes { get; set; }
}
调试时,我看到所有属性都正确传递。使用 newInd = new expenseindividual() 而不是 Create() 并不能解决问题。我尝试手动设置 expenseindividual.ID,这使插入工作,但它必须自动递增并启用自动递增。所以我真的很想知道是什么导致了这里的问题以及如何解决它?
如果我
理解正确,您正在尝试在尚不存在的情况下将新的费用单插入数据库?
首先。。。此代码当前忽略数据库中尚不存在的支出注释...
expensenote ex = (from e in db.expensenotes
where e.ID == id
select e).FirstOrDefault();
if (ex == null)
{
//return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Request was not found.");
}
else
{
当您传递数据库中尚不存在的支出通知的 ID 时,ex
将始终为 null,因此不会运行任何代码。
惯例是,通常 PUT 始终用于更新记录,在尝试创建记录时使用 POST,但这取决于您。
您需要实现逻辑以在 if 语句中创建新记录,替换注释掉的 return 语句。