Я использую Entity Framework с MongoDB. У меня есть класс Account
со следующим полем:
private readonly byte[] salt;
Учетная запись настраивается в Entity Framework следующим образом:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Account>().ToCollection("accounts");
}
Когда я сохраняю Account
в своей базе данных, соответствующий документ не имеет salt
.
Как сохранить поле или свойство в базе данных с помощью Entity Framework, сохраняя при этом его конфиденциальность?
Вам следует реализовать Backing Field.
Salt
с резервным полем: salt
.internal class Account : SignInCredentials
{
private readonly byte[] salt;
public byte[] Salt
{
get { return salt; }
}
...
}
Salt
с помощью поля поддержки в Fluent API.internal class MongoDataContext : DbContext
{
...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Account>()
.Property(x => x.Salt)
.HasField("salt");
modelBuilder.Entity<Account>()
.ToCollection("accounts");
}
}
Демо
Оказывается, мне просто нужно было вручную добавить поле для модели.
var account = modelBuilder.Entity<Account>();
account.Property("fieldName");
account.ToCollection("accounts");
Есть ли способ сделать это, не делая публичной собственностью? Я не хочу, чтобы соль была доступна за пределами учетной записи.