我尝试更新文本状态和外键状态ID。
public class Model : DbModelBuilder
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int id { get; set; }
[Required]
public string Status { get; set; } //relationship mappings
public virtual Statuses StatusId { get; set; }
}
public class Statuses
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int id { get; set; }
[Required] public string StatusName { get; set; }
}
public void updateStatus(String status, int statusId = 0)
{
using (Context ctx = new Context())
{
if (statusId != 0)
{
if (ctx.Statuses.Any(ts => ts.id == statusId))
{
model.StatusId = ctx.Statuses.Find(statusId);
}
}
model.Status = status;
ctx.Entry(model).State = EntityState.Modified;
ctx.SaveChanges();
}
}
文本状态设置正确,但外键状态未更新。
在更新整个模型时,我在另一个类中有类似的功能,它没有任何问题。
我能够通过记录信息来查看模型更新。但是,如果我在ctx.savechanges()之后记录ctx.model.statusId,则statusId不会更新。
答案 0 :(得分:0)
我看到它的方式,这里有3条可能的执行路径:
statusId
参数为零,并且if
块中的代码未执行。statusId
参数不为零,但与数据库中任何现有Statuses
条目的ID不匹配(因此Any()
测试失败并且分配给{{1没有完成)。model.StatusId
参数非零且 匹配现有statusId
条目的ID(因此Statuses
测试成功,并且分配到Any()
已完成。如果#1我不希望model.StatusId
字段由model.StatusId
更新,因为尽管您已经设置了SaveChanges
属性string
,没有任何内容可以将其与Status
实体相关联或导致EF认为他们相关。
与案例#2相同,因为没有进行额外的分配。
对于案例#3,您在调用Statuses
之前设置了StatusId
属性,因此在之后仍应设置 SaveChanges
。
所以...我不确定您认为哪种情况失败,或者您认为SaveChanges
值会更新的原因?