Я устраняю следующее непонятное поведение. У меня есть объект 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
Почему Entity Framework сбрасывает мое перечисление на значение по умолчанию при сохранении ⇐ C#
Место общения программистов C#
1766419180
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()
Подробнее здесь: [url]https://stackoverflow.com/questions/65600481/why-is-entity-framework-resetting-my-enum-to-default-value-when-saved[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия