четверг, 22 мая 2025 г.

Chad, Entity Framework, Sql Server, EF Core, Nuget, datetime2

Chad, Entity Framework, Sql Server, EF Core, Nuget

SQL SERVER DELETE - название топика

https://ask.chadgpt.ru/share/ca0f14c0-5b36-4f36-8762-0f4d76aff440

Nuget Microsoft.EntityFrameworkCore

dotnet add package Microsoft.EntityFrameworkCore.SqlServer

Project

D:\VC25\gs.trade.core\GS.EvlCoreWebApi01\Ca_DB_Model_Init_03\Ca_DB_Model_Init_03.csproj

Если в базе данных столбец ID — типа bigint, то в C# его тип должен быть Int64 (или long), чтобы избежать переполнения или ошибок при чтении/записи данных. Такой подход корректный и полностью рабочий, как отмечается на Stack Overflow:
> "It's always safe to convert an int to Int64 so there is no information loss in this conversion."
> [Источник 2]

Если до этого у вас было int ID { get; set; }, это могло привести к ошибке, если в базе встречались значения больше int.MaxValue (2 147 483 647), так как bigint в SQL — это 64-битное число, соответствующее C# типу Int64 (long).

В итоге, если после вашей правки "все заработало" — это ожидаемо и правильно с точки зрения совместимости между C# и базой данных.

Примечание по типам:

  • В C#, Int64 — это alias для типа long (и наоборот).
  • Можно писать как public long ID { get; set; }, это будет то же самое.
----

Оба типа, datetime и datetime2, используются в SQL Server для хранения даты и времени, но между ними есть отличия:

1. datetime2 — рекомендуемый выбор:

  • datetime2 — более новый тип, обладает большей точностью (до 7 знаков после запятой) и может хранить более широкий диапазон дат: от 0001-01-01 до 9999-12-31.
  • datetime — старый тип, точность до 3 миллисекунд, диапазон от 1753-01-01 до 9999-12-31.

2. Совместимость с C#:
В C# оба обычно связывают с типом DateTime.

3. Рекомендация Microsoft:

4. Пример:
В SQL:

Modified datetime2 NOT NULL

В C#:

public DateTime Modified { get; set; }

или если допускается отсутствие значения:

public DateTime? Modified { get; set; }
Выбирайте datetime2 — это лучший современный вариант.
В C# используйте DateTime (System.DateTime).


Комментариев нет:

Отправить комментарий