Каждый раз, когда работает начальный метод, он перезаписывает все столбцы, и каждый раз, когда даты отличаются. Если вы хотите предотвратить перезапись введенных данных, то вам нужно проверить, не существует ли она в вашей базе данных, а затем запустить ее. Или переопределите метод SaveChanges()
в DbContext
, если хотите запретить обновление некоторых полей.
Пример: -
1.Если вы не хотите затем обновить введенные данные -
protected override void Seed(ApplicationDbContext context)
{
if (!context.TestModels.Any(u => u.Id== 1))
{
context.TestModels.AddOrUpdate(p => p.Id, new TestModel()
{
Id = 1,
Name = "Test",
CreatedDateUtc = DateTime.UtcNow,
CreatedBy = "Seed",
UpdatedDateUtc = DateTime.UtcNow,
UpdatedBy = "Seed",
DeletedDateUtc = null,
DeletedBy = null,
});
}
base.Seed(context);
}
2.Если нужно запретить обновление некоторых полей ( этот процесс работает для любой сущности из любой точки текущего DbContext ) -
Атрибут -
[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public sealed class IgnoreUpdateAttribute : Attribute
{
}
Модель -
public class TestModel
{
public int Id { get; set; }
public string Name { get; set; }
[IgnoreUpdate]//for ignoring update
public DateTime CreatedDateUtc { get; set; }
[IgnoreUpdate]//for ignoring update
public string CreatedBy { get; set; }
public DateTime UpdatedDateUtc { get; set; }
public string UpdatedBy { get; set; }
public DateTime? DeletedDateUtc { get; set; }
public string DeletedBy { get; set; }
}
Семя -
protected override void Seed(ApplicationDbContext context)
{
context.TestModels.AddOrUpdate(p => p.Id, new TestModel()
{
Id = 1,
Name = "Test",
CreatedDateUtc = DateTime.UtcNow,
CreatedBy = "Seed",
UpdatedDateUtc = DateTime.UtcNow,
UpdatedBy = "Seed",
DeletedDateUtc = null,
DeletedBy = null,
});
base.Seed(context);
}
DbContext -
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public DbSet<TestModel> TestModels { get; set; }
//---DB Set
public override int SaveChanges()
{
var entities= ChangeTracker.Entries().Where(e => e.State == EntityState.Modified).ToList();
foreach (var entry in entities)
{
var properties = typeof(TestModel).GetProperties()// get you model properties
.Where(property =>
property != null && Attribute.IsDefined(property, typeof(IgnoreUpdateAttribute)))//which has decorated as IgnoreUpdate
.Select(p => p.Name);
foreach (var property in properties)
{
entry.Property(property).IsModified = false;
}
}
return base.SaveChanges();
}
//--- Code
}
(проверено)