Я работаю над проектом Xamarin pcl для .netstandard 2.0 и использую Microsoft.EntityFramework.core.sqlite
DatabaseContext
public class DatabaseContext: DbContext
{
private readonly string _databasePath;
// Hotworks related tables
public DbSet<A> a { get; set; }
public DbSet<B> b { get; set; }
public DbSet<C> c { get; set; }
public DbSet<D> d { get; set; }
public DatabaseContext(string databasePath)
{
_databasePath = databasePath;
this.Database.EnsureCreated();
}
public override int SaveChanges()
{
AddTimestamps();
return base.SaveChanges();
}
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default(CancellationToken))
{
AddTimestamps();
return (await base.SaveChangesAsync(true, cancellationToken));
}
private void AddTimestamps()
{
var entities = ChangeTracker.Entries().Where(x => x.Entity is BaseEntity && (x.State == EntityState.Added || x.State == EntityState.Modified));
foreach (var entity in entities)
{
var now = DateTime.UtcNow; // current datetime
if (entity.State == EntityState.Added)
{
((BaseEntity)entity.Entity).CreatedAt = now;
}
((BaseEntity)entity.Entity).UpdatedAt = now;
}
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite($"Filename={_databasePath}");
}
}
Модельные классы
public class A:BaseEntity
{
public int id { get; set; }
public B b { get; set; }
public C c { get; set; }
public virtual ICollection<D> d { get; set; }= new HashSet<D>();
public string Name { get; set; }
}
public abstract class BaseEntity
{
public DateTime? CreatedAt { get; set; }
public DateTime? UpdatedAt { get; set; }
}
Когда я добавляю объект класса 'A' в базу данных, как:
var aIns = await _databaseContext.A.AddAsync(a);
await _databaseContext.SaveChangesAsync();
var isAdded = sIns.State == EntityState.Added;
Я получаю isAdded как ложное. Но он сохраняется в БД, как я подтвердил, получив список всех А, но все остальные элементы внутри экземпляра А, такие как B, C, и список D , обнуляются. Я также подтвердил, что перед сохранением A я сохранил отдельные экземпляры B, C и D в соответствующих таблицах.
Есть ли что-то неправильное, с чем я здесь работаю, и что еще нужно сделать?
заранее спасибо.