![](/img/trans.png)
[英]After setting EntityState.Unchanged the entity properties are lost
[英]EntityState Of Inherited Properties Remains Unchanged
我有一個從基類繼承的實體,當我更新繼承的屬性時, EntityState
不變
public abstract class BaseEntity
{
public DateTime? DeletedDateTime { get; set; }
public string DeletedByApplicationUserID { get; set; }
public bool Deleted { get; set; }
}
public class Incident : BaseEntity
{
public string IncidentId { get; set; }
//..other props
}
public override int SaveChanges()
{
AddTimeStamps();
return base.SaveChanges();
}
private void AddTimeStamps()
{
var entities = ChangeTracker.Entries().Where(x => x.Entity is BaseEntity && (x.State == EntityState.Added || x.State == EntityState.Modified || x.State == EntityState.Deleted));
foreach (var entity in entities)
{
//prevent default .remove behavior
if(entity.State == EntityState.Deleted)
{
((BaseEntity)entity.Entity).Deleted = true;
entity.State = EntityState.Modified;
}
//user used the delete method of the base entity
if (((BaseEntity)entity.Entity).Deleted)
{
((BaseEntity)entity.Entity).DeletedDateTime = DateTime.Now;
((BaseEntity)entity.Entity).DeletedByApplicationUserID = currentUserId;
}
}
}
當我調用以下函數時,刪除的未設置為true
public OtherMethod(string incidentId)
{
using (ApplicationDbContext db = dbContextWrapper.DbContext())
{
var incident = db.Incidents.Where(x => x.IncidentId == incidentId).FirstOrDefault();
if (incident != null)
{
db.Entry(incident).State = System.Data.Entity.EntityState.Modified;//who knows why i have to do this
incident.Delete();
db.SaveChanges();
}
}
}
手動設置狀態確實可以,如果可能的話,我想避免這樣做。
不這樣做: db.Entry(incident).State = System.Data.Entity.EntityState.Modified;
,使跟蹤器忽略已刪除的更改。
問題在於該屬性被故意忽略,如下所示:
modelBuilder.Entity<Incident>().Map(m => m.Requires("Deleted").HasValue(false))
.Ignore(m => m.Deleted);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.