Почему Entity Framework сбрасывает мое перечисление на значение по умолчанию при сохраненииC#

Место общения программистов C#
Ответить
Anonymous
 Почему Entity Framework сбрасывает мое перечисление на значение по умолчанию при сохранении

Сообщение Anonymous »

Я устраняю следующее непонятное поведение. У меня есть объект exampleEntity, который содержит перечисление [Required], которое по причинам миграции имеет значение по умолчанию. При вставке нового SampleEntity я указываю значение, которое должно принимать это поле. Проверка в отладчике показывает, что значение установлено правильно в локальной версии DbSet. Однако всякий раз, когда я вызываю SaveChanges() в контексте, значение перечисления сбрасывается до настроенного значения по умолчанию.
Модели:
public enum ExampleEnum
{
Mecury,
Venus,
Earth,
Mars
}

internal class ExampleEntity
{
public int id { get; set; }

[Required]
public ExampleEnum Val { get; set; }
}

internal class EFContext : DbContext
{
public EFContext(DbContextOptions options) : base(options)
{
}

public virtual DbSet Ents { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity(entity =>
{
entity.Property(e => e.Val).HasDefaultValue(ExampleEnum.Earth);
});
}
}

Тестовый код:
class Program
{
private static DbConnection CreateInMemoryDatabase()
{
var connection = new SqliteConnection("Filename=:memory:");
connection.Open();
return connection;
}

static void Main(string[] args)
{
var ContextOptions = new DbContextOptionsBuilder()
.UseSqlite(CreateInMemoryDatabase())
.Options;

using (var context = new EFContext(ContextOptions))
{
context.Database.EnsureDeleted();
context.Database.EnsureCreated();
}

using (var db = new EFContext(ContextOptions))
{
var newEntity = new ExampleEntity
{
Val = ExampleEnum.Mecury,
};
db.Ents.Add(newEntity);
db.SaveChanges();
}

using (var db = new EFContext(ContextOptions))
{
var savedEnt = db.Ents.First();
Console.WriteLine(savedEnt.Val.ToString());
}
}
}

Я ожидал, что напечатанное значение будет Меркурием, но оно распечатывает настроенную Землю по умолчанию. Я могу решить эту проблему, сохранив изменения и установив для Val желаемое значение:
var newEntity = new ExampleEntity
{
Val = ExampleEnum.Mecury,
};
db.Ents.Add(newEntity);
db.SaveChanges();
newEnttity.Val = ExampleEnum.Mecury;
db.SaveChanges()


Подробнее здесь: https://stackoverflow.com/questions/656 ... when-saved
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»