Anonymous
Как мне обрабатывать Entity Framework Core, пропуская явные значения (IsActive = 0) при заполнении моей базы данных?
Сообщение
Anonymous » 24 ноя 2024, 14:52
Я использую ASP.NET Core, SQLite для создания приложения банковского типа. Когда я обновляю и заполняю свою базу данных, EF Core не распознает или игнорирует IsActive = 0, из-за чего все мои BankAccount создаются со значением по умолчанию 1. Есть ли проблема в том, как я создал мою таблицу, как я заполняю свою базу данных или что-то еще?
Вот оператор заполнения:
Код: Выделить всё
modelBuilder.Entity().HasData(
new BankAccount {
PkAccountId = 1,
FkAccountTypeId = 1,
Balance = 1500.00M,
IsActive = 1,
DateOpened = DateTime.Parse("2024/03/09")
},
new BankAccount {
PkAccountId = 2,
FkAccountTypeId = 2,
Balance = 3000.00M,
IsActive = 0,
DateOpened = DateTime.Parse("2020/06/01")
},
new BankAccount {
PkAccountId = 3,
FkAccountTypeId = 3,
Balance = 8000.00M,
IsActive = 1,
DateOpened = DateTime.Parse("2021/01/01")
},
new BankAccount {
PkAccountId = 4,
FkAccountTypeId = 4,
Balance = 12000.00M,
IsActive = 1,
DateOpened = DateTime.Parse("2024/07/06")
},
new BankAccount {
PkAccountId = 5,
FkAccountTypeId = 5,
Balance = 4500.00M,
IsActive = 1,
DateOpened = DateTime.Parse("2020/03/08")
});
И скриншот выполнения вышеуказанных команд:
Код: Выделить всё
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
INSERT INTO "Bank Account" ("PkAccountId", "Balance", "DateOpened", "FkAccountTypeId", "IsActive")
VALUES (1, '1500.0', '2024-03-09 00:00:00', 1, 1);
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
INSERT INTO "Bank Account" ("PkAccountId", "Balance", "DateOpened", "FkAccountTypeId")
VALUES (2, '3000.0', '2020-06-01 00:00:00', 2);
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
INSERT INTO "Bank Account" ("PkAccountId", "Balance", "DateOpened", "FkAccountTypeId", "IsActive")
VALUES (3, '8000.0', '2021-01-01 00:00:00', 3, 1);
INSERT INTO "Bank Account" ("PkAccountId", "Balance", "DateOpened", "FkAccountTypeId", "IsActive")
VALUES (4, '12000.0', '2024-07-06 00:00:00', 4, 1);
INSERT INTO "Bank Account" ("PkAccountId", "Balance", "DateOpened", "FkAccountTypeId", "IsActive")
VALUES (5, '4500.0', '2020-03-08 00:00:00', 5, 1);
Вот моя таблица:
Код: Выделить всё
modelBuilder.Entity(entity =>
{
// Table Name
entity.ToTable("Bank Account");
// Primary Key
entity.HasKey(e => e.PkAccountId);
entity.Property(e => e.PkAccountId).ValueGeneratedOnAdd();
// Properties
entity.Property(e => e.DateOpened)
.HasColumnType("TEXT")
.HasDefaultValue(DateTime.Now)
.IsRequired();
entity.Property(e => e.Balance)
.HasColumnType("REAL")
.IsRequired();
entity.Property(e => e.IsActive)
.HasColumnType("INTEGER")
.HasDefaultValue(1)
.IsRequired();
// Foreign Key Relationship
entity.HasOne(e => e.BankAccountType)
.WithMany(e => e.BankAccounts)
.HasForeignKey(e => e.FkAccountTypeId)
.OnDelete(DeleteBehavior.Restrict);
});
Сначала я подумал, что, возможно, возникла проблема с тем, как SQLite создает таблицы, поэтому я изменил типы столбцов, чтобы они соответствовали доступным типам столбцов в SQLite из varchar(50), decimal(9, 2) и т. д.
Я также подумал, что, возможно, возникла проблема с моим ограничением диапазона, поэтому я удалил это, а также добавил в модели конструктор по умолчанию. Насколько я понял, ни одно из этих изменений не повлияло на создание таблиц или заполнение.
Подробнее здесь:
https://stackoverflow.com/questions/792 ... isactive-0
1732449145
Anonymous
Я использую ASP.NET Core, SQLite для создания приложения банковского типа. Когда я обновляю и заполняю свою базу данных, EF Core не распознает или игнорирует IsActive = 0, из-за чего все мои BankAccount создаются со значением по умолчанию 1. Есть ли проблема в том, как я создал мою таблицу, как я заполняю свою базу данных или что-то еще? Вот оператор заполнения: [code]modelBuilder.Entity().HasData( new BankAccount { PkAccountId = 1, FkAccountTypeId = 1, Balance = 1500.00M, IsActive = 1, DateOpened = DateTime.Parse("2024/03/09") }, new BankAccount { PkAccountId = 2, FkAccountTypeId = 2, Balance = 3000.00M, IsActive = 0, DateOpened = DateTime.Parse("2020/06/01") }, new BankAccount { PkAccountId = 3, FkAccountTypeId = 3, Balance = 8000.00M, IsActive = 1, DateOpened = DateTime.Parse("2021/01/01") }, new BankAccount { PkAccountId = 4, FkAccountTypeId = 4, Balance = 12000.00M, IsActive = 1, DateOpened = DateTime.Parse("2024/07/06") }, new BankAccount { PkAccountId = 5, FkAccountTypeId = 5, Balance = 4500.00M, IsActive = 1, DateOpened = DateTime.Parse("2020/03/08") }); [/code] И скриншот выполнения вышеуказанных команд: [code]info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] INSERT INTO "Bank Account" ("PkAccountId", "Balance", "DateOpened", "FkAccountTypeId", "IsActive") VALUES (1, '1500.0', '2024-03-09 00:00:00', 1, 1); info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] INSERT INTO "Bank Account" ("PkAccountId", "Balance", "DateOpened", "FkAccountTypeId") VALUES (2, '3000.0', '2020-06-01 00:00:00', 2); info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] INSERT INTO "Bank Account" ("PkAccountId", "Balance", "DateOpened", "FkAccountTypeId", "IsActive") VALUES (3, '8000.0', '2021-01-01 00:00:00', 3, 1); INSERT INTO "Bank Account" ("PkAccountId", "Balance", "DateOpened", "FkAccountTypeId", "IsActive") VALUES (4, '12000.0', '2024-07-06 00:00:00', 4, 1); INSERT INTO "Bank Account" ("PkAccountId", "Balance", "DateOpened", "FkAccountTypeId", "IsActive") VALUES (5, '4500.0', '2020-03-08 00:00:00', 5, 1); [/code] Вот моя таблица: [code]modelBuilder.Entity(entity => { // Table Name entity.ToTable("Bank Account"); // Primary Key entity.HasKey(e => e.PkAccountId); entity.Property(e => e.PkAccountId).ValueGeneratedOnAdd(); // Properties entity.Property(e => e.DateOpened) .HasColumnType("TEXT") .HasDefaultValue(DateTime.Now) .IsRequired(); entity.Property(e => e.Balance) .HasColumnType("REAL") .IsRequired(); entity.Property(e => e.IsActive) .HasColumnType("INTEGER") .HasDefaultValue(1) .IsRequired(); // Foreign Key Relationship entity.HasOne(e => e.BankAccountType) .WithMany(e => e.BankAccounts) .HasForeignKey(e => e.FkAccountTypeId) .OnDelete(DeleteBehavior.Restrict); }); [/code] Сначала я подумал, что, возможно, возникла проблема с тем, как SQLite создает таблицы, поэтому я изменил типы столбцов, чтобы они соответствовали доступным типам столбцов в SQLite из varchar(50), decimal(9, 2) и т. д. Я также подумал, что, возможно, возникла проблема с моим ограничением диапазона, поэтому я удалил это, а также добавил в модели конструктор по умолчанию. Насколько я понял, ни одно из этих изменений не повлияло на создание таблиц или заполнение. Подробнее здесь: [url]https://stackoverflow.com/questions/79219259/how-should-i-handle-entity-framework-core-omitting-explicit-values-isactive-0[/url]