У меня странная проблема с использованием ядра Framework Entity для вставки записей с столбцами значений по умолчанию.
Есть ли другой способ получить ожидаемое поведение, я упускаю что -то глупое? < /p>
tldr: настройка свойства int = 0 или bool для истинных результатов в используемых значениях по умолчанию
String.Empty для новой строки дает ORA-01400: не может вставить нуль (это, похоже, Oracle вещь) < /p>
Сценарии:
Использование миграции для добавления новых столбцов и добавления новых записей приводит к нормальному поведению (значения по умолчанию вставлены) < /p>
< P> Добавление новой записи только по предоставлению Oldfield = OK
"ID" : 6, "OLDFIELD" : "ef test 1", "NEWINT" : 5, "NEWSTRING" : "def", "NEWBOOLFALSE" : 0, "NEWBOOLTRUE" : 1< /code> < /p>
Добавление с значением, отличным от .NET по умолчанию, тоже работает
"ID" : 12, "OLDFIELD" : "ef test all set", "NEWINT" : 42, "NEWSTRING" : "string here", "NEWBOOLFALSE" : 1, "NEWBOOLTRUE" : 1< /code> < /p>
Теперь проблемы
Когда вы указываете 0 для int и false для bools < /p>
var test = new TestDef()
{
OldField = "ef bad test",
NewInt = 0,
NewBoolFalse = false,
NewBoolTrue = false
};
_womaDbContext.Add(test);
await _womaDbContext.SaveChangesAsync();
< /code>
Вы получаете «id»: 36, «Oldfield»: «Ef Bad Test», «Newint»: 5, «Newstring»: «def», «Newboolfalse»: 0, « Newbooltrue ": 1
newstring = string.empty дает исключение Oracle ORA-01400: не может вставить NULL (это, кажется, оракул вещь) < /p>
Вставка запроса нормально < /p>
INSERT INTO WOMA_SCHEMA.TESTDEF
(ID, OLDFIELD, NEWINT, NEWBOOLFALSE, NEWBOOLTRUE)
VALUES("WOMA_SCHEMA"."ISEQ$$_42048".nextval, 'sql empty',0, 0,0);
< /code>
Это делает невозможным вставить ложное значение в Newbooltrue или 0 в Newint, не выполняя обновление < /p>
testclass (dbcontext onmodelcreating calls testdef. OnModelCreating (ModelBuilder)): < /p>
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
namespace Test.Model
{
[Table("TESTDEF")]
public class TestDef
{
[Column("ID")]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Column("OLDFIELD")]
public string OldField { get; set; }
[Required]
[Column("NEWINT")]
public int NewInt { get; set; }
[Required]
[Column("NEWSTRING")]
public string NewString { get; set; }
[Required]
[Column("NEWBOOLTRUE")]
public bool NewBoolTrue { get; set; }
[Required]
[Column("NEWBOOLFALSE")]
public bool NewBoolFalse { get; set; }
public static void OnModelCreating(ModelBuilder modelBuilder)
{
// Default values
modelBuilder
.Entity()
.Property(e => e.NewInt)
.HasDefaultValue(5);
modelBuilder
.Entity()
.Property(e => e.NewString)
.HasDefaultValue("def");
modelBuilder
.Entity()
.Property(e => e.NewBoolTrue)
.HasDefaultValue(true);
modelBuilder
.Entity()
.Property(e => e.NewBoolFalse)
.HasDefaultValue(false);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/697 ... lue-is-set
Проблема с EF Core 5 HasDefaultValue, EF выдвигает значение по умолчанию, когда значение устанавливается на тип .NET по ⇐ C#
Место общения программистов C#
1739926538
Anonymous
У меня странная проблема с использованием ядра Framework Entity для вставки записей с столбцами значений по умолчанию.
Есть ли другой способ получить ожидаемое поведение, я упускаю что -то глупое? < /p>
tldr: настройка свойства int = 0 или bool для истинных результатов в используемых значениях по умолчанию
String.Empty для новой строки дает ORA-01400: не может вставить нуль (это, похоже, Oracle вещь) < /p>
Сценарии:
Использование миграции для добавления новых столбцов и добавления новых записей приводит к нормальному поведению (значения по умолчанию вставлены) < /p>
< P> Добавление новой записи только по предоставлению Oldfield = OK
"ID" : 6, "OLDFIELD" : "ef test 1", "NEWINT" : 5, "NEWSTRING" : "def", "NEWBOOLFALSE" : 0, "NEWBOOLTRUE" : 1< /code> < /p>
Добавление с значением, отличным от .NET по умолчанию, тоже работает
"ID" : 12, "OLDFIELD" : "ef test all set", "NEWINT" : 42, "NEWSTRING" : "string here", "NEWBOOLFALSE" : 1, "NEWBOOLTRUE" : 1< /code> < /p>
Теперь проблемы
Когда вы указываете 0 для int и false для bools < /p>
var test = new TestDef()
{
OldField = "ef bad test",
NewInt = 0,
NewBoolFalse = false,
NewBoolTrue = false
};
_womaDbContext.Add(test);
await _womaDbContext.SaveChangesAsync();
< /code>
Вы получаете «id»: 36, «Oldfield»: «Ef Bad Test», «Newint»: 5, «Newstring»: «def», «Newboolfalse»: 0, « Newbooltrue ": 1
newstring = string.empty дает исключение Oracle ORA-01400: не может вставить NULL (это, кажется, оракул вещь) < /p>
Вставка запроса нормально < /p>
INSERT INTO WOMA_SCHEMA.TESTDEF
(ID, OLDFIELD, NEWINT, NEWBOOLFALSE, NEWBOOLTRUE)
VALUES("WOMA_SCHEMA"."ISEQ$$_42048".nextval, 'sql empty',0, 0,0);
< /code>
Это делает невозможным вставить ложное значение в Newbooltrue или 0 в Newint, не выполняя обновление < /p>
testclass (dbcontext onmodelcreating calls testdef. OnModelCreating (ModelBuilder)): < /p>
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
namespace Test.Model
{
[Table("TESTDEF")]
public class TestDef
{
[Column("ID")]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Column("OLDFIELD")]
public string OldField { get; set; }
[Required]
[Column("NEWINT")]
public int NewInt { get; set; }
[Required]
[Column("NEWSTRING")]
public string NewString { get; set; }
[Required]
[Column("NEWBOOLTRUE")]
public bool NewBoolTrue { get; set; }
[Required]
[Column("NEWBOOLFALSE")]
public bool NewBoolFalse { get; set; }
public static void OnModelCreating(ModelBuilder modelBuilder)
{
// Default values
modelBuilder
.Entity()
.Property(e => e.NewInt)
.HasDefaultValue(5);
modelBuilder
.Entity()
.Property(e => e.NewString)
.HasDefaultValue("def");
modelBuilder
.Entity()
.Property(e => e.NewBoolTrue)
.HasDefaultValue(true);
modelBuilder
.Entity()
.Property(e => e.NewBoolFalse)
.HasDefaultValue(false);
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/69769871/issue-with-ef-core-5-hasdefaultvalue-ef-pushes-default-value-when-value-is-set[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия