سلام
کلاس هایی که از secondBaseEntity ارث بری میکنند موقع حذف RegistererUserId شون میپره
چرا؟
این کلاس های والد :
public class BaseEntity {
public BaseEntity()
{
InsertTime = UpdateTime = DateTime.Now;
}
[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
[Display(ResourceType = typeof(App_GlobalResources.FieldsName), Name = "InsertTime")]
public DateTime InsertTime { get; set; }
[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
[Display(ResourceType = typeof(App_GlobalResources.FieldsName), Name = "UpdateTime")]
public DateTime UpdateTime { get; set; }
[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
[HiddenInput(DisplayValue = false)]
[Display(ResourceType = typeof(App_GlobalResources.FieldsName), Name = "DeleteTime")]
public DateTime? DeleteTime { get; set; }
[ScaffoldColumn(false)]
public bool? IsPhysicalDelete { get; set; }
}
public class SecondBaseEntity : BaseEntity {
public SecondBaseEntity()
{
IsActive = true;
}
[ForeignKey("RegistererUser")]
[HiddenInput(DisplayValue = false)]
public int? RegistererUserId { get; set; }
[ScaffoldColumn(false)]
public bool IsActive { get; set; }
[Display(ResourceType = typeof(App_GlobalResources.FieldsName),Name = "RegistererUser")]
public string GetUsername => RegistererUser == null ? "ندارد" : RegistererUser.UserName;
public virtual User RegistererUser { get; set; }
}
public class SecondBaseEntityWithId : SecondBaseEntity {
[Key]
[ScaffoldColumn(false)]
public int Id { get; set; }
}
به عنوان مثال کلاس Credit
public partial class Credit : SecondBaseEntityWithId {
internal class Confiuration : EntityTypeConfiguration<Credit>
{
public Confiuration()
{
}
}
public Credit()
{
CardOrGroupCharges = new HashSet<CardOrGroupCharge>();
GroupsInCredits = new HashSet<GroupsInCredit>();
ConditionsInCredits = new HashSet<ConditionsInCredit>();
}
[ForeignKey("Acceptor")]
public int AcceptorId { get; set; }
[Display(ResourceType = typeof(App_GlobalResources.FieldsName), Name = "Name")]
[Required(ErrorMessageResourceType = typeof(App_GlobalResources.Errors), ErrorMessageResourceName = "Required")]
[StringLength(100, MinimumLength = 2, ErrorMessageResourceType = typeof(App_GlobalResources.Errors), ErrorMessageResourceName = "StringLength")]
public string Name { get; set; }
[Display(ResourceType = typeof(App_GlobalResources.FieldsName), Name = "Picture")]
public byte[] Picture { get; set; }
[Display(ResourceType = typeof(App_GlobalResources.FieldsName), Name = "Gender")]
public bool? GenderFilter { get; set; }
[DataType(DataType.MultilineText)]
[Display(ResourceType = typeof(App_GlobalResources.FieldsName), Name = "Description")]
public string Description { get; set; }
public virtual Acceptor Acceptor { get; set; }
public virtual ICollection<CardOrGroupCharge> CardOrGroupCharges { get; set; }
public virtual IEnumerable<GroupsInCredit> GroupsInCredits { get; set; }
public virtual IEnumerable<ConditionsInCredit> ConditionsInCredits { get; set; }
}
این هم موقع save در Context
public override int SaveChanges() {
var changes =
ChangeTracker.Entries<BaseEntity>()
.Where(x => x.State == EntityState.Deleted || x.State == EntityState.Modified).ToList();
foreach (var change in changes)
{
var entity = change.Entity;
switch (change.State)
{
case EntityState.Deleted:
change.State = EntityState.Modified;
entity.DeleteTime = DateTime.Now;
break;
case EntityState.Modified:
entity.UpdateTime = DateTime.Now;
break;
}
if (entity.IsPhysicalDelete.HasValue && entity.IsPhysicalDelete.Value)
change.State = EntityState.Deleted;
}
return base.SaveChanges();
}
این هم متد حذف در کنترلر
public ActionResult DeleteCredit(int? id) {
var secureId = id ?? -1;
if (secureId > 0)
{
try
{
var context = new SabamehrDbContext(Utility.GetServiceAddressUri);
var item = context.Credits.Where(x => x.Id == secureId).FirstOrDefault();
if (item != null)
{
context.DeleteObject(item);
context.SaveChanges();
}
}
catch (Exception e)
{
ViewBag.EditError = e.Message;
}
}
return RedirectToAction("GetCredits");
}
ممنون میشم کمکم کنید