簡體   English   中英

繼承屬性的EntityState保持不變

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM