gpt4 book ai didi

asp.net-mvc-3 - 更新标记实体日期时间属性不变时

转载 作者:行者123 更新时间:2023-12-04 06:13:24 24 4
gpt4 key购买 nike

我的域模型中有这个实体服务,有两个日期时间类型属性 entrydate 和 updatedon。

当用户在编辑 View 中进行任何更改并提交表单时,我希望将回发/修改对象的 entrydate 属性标记为未更改,以便在执行更新时无法覆盖 entrydate。

public class Service
{
public int ServiceID
{
get;
set;

}
[Required(ErrorMessage="Please enter Name")]
public string Name
{
get;
set;
}

[Required(ErrorMessage="Please enter the duration for the service")]
public short Duration
{
get;
set;
}


[DataType(DataType.Date)]
public DateTime EntryDate
{
get;
set;
}

[DataType(DataType.Date)]
public DateTime UpdatedOn
{
get;
set;
}



public decimal Cost
{
get; set;

}
}

将更改持久化到 db 的存储库方法如下:
 public void InsertOrUpdate(Service service)
{
if (service.ServiceID == default(int)) {
// New entity
context.Services.Add(service);
} else {
// Existing entity

context.Entry(service).State = EntityState.Modified;
}
}

最佳答案

您可以从数据库中重新加载原始实体:

else {
// Existing entity
var serviceInDb = context.Services.Find(service.ServiceID);
service.EntryDate = serviceInDb.EntryDate;
context.Entry(serviceInDb).CurrentValues.SetValues(service);
}

当您调用 SaveChanges稍后,仅针对已真正更改的属性的 UPDATE 语句将被发送到数据库(对于其他未更改的属性也有好处)。

或者只是重新加载 EntryDate :
else {
// Existing entity
var entryDateInDb = context.Services
.Select(s => s.EntryDate)
.Single(s => s.ServiceID == service.ServiceID);
service.EntryDate = entryDateInDb;
context.Entry(service).State = EntityState.Modified;
}

另一种有效但丑陋的方法是:
context.Services.Attach(service); // thanks to user202448, see comments

context.Entry(service).Property(s => s.Name).IsModified = true;
context.Entry(service).Property(s => s.Duration).IsModified = true;
context.Entry(service).Property(s => s.UpdatedOn).IsModified = true;
context.Entry(service).Property(s => s.Cost).IsModified = true;

所以,不要设置 EntryDate属性要修改,但所有其他属性一一修改。

想到的方法...
context.Entry(service).State = EntityState.Modified;
context.Entry(service).Property(s => s.EntryDate).IsModified = false;

...不幸的是不起作用,因为将属性设置回未修改的已标记为 Modified不支持,会抛出异常。

关于asp.net-mvc-3 - 更新标记实体日期时间属性不变时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7520647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com