Я использую одну и ту же сущность в двух DbContexts.
public class ActualDbContext : DbContext
{
public DbSet<Doc> Docs { get; set; }
}
public class ArchivedDbContext : DbContext
{
public DbSet<Doc> Docs { get; set; }
}
public class Doc
{
...
}
Как добавить игнорируемое поле к этой сущности, но заполнить его из DbContext?
public class Doc
{
...
public bool IsArchived {get;set;}
}
public class ActualDbContext : DbContext
{
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Doc>(entity =>
{
entity
.Ignore(x => x.IsArchived)
.WithValue(x => false); // ??
};
}
}
public class ArchivedDbContext : DbContext
{
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Doc>(entity =>
{
entity
.Ignore(x => x.IsArchived)
.WithValue(x => true); // ??
};
}
}
При чтении данных из базы данных, это свойство должно быть заполнено. В программном коде я хочу избежать дублирования кода. Мне нужно работать с этими объектами таким же образом. За исключением этого свойства. Как я могу это сделать?
@ ali, ты имеешь в виду что-то подобное?
class MyRepo: IRepo
{
private bool _isArchived;
public MyRepo (MyContext context, bool isArchived)
{
_context = context;
_isArchived = isArchived;
}
public IQueryable<Doc> GetData (...)
{
return _mainDbContext.Docs.Where(....)
.Select (x=> new Doc
{
Id = x.Id,
IsArchived = _isArchived
});
}
}
Мне не очень нравится это решение.