엔티티 프레임워크에서 서명되지 않은 int/long 유형을 사용하는 방법은 무엇입니까?
클래스 속성은 다음과 같습니다.long
데이터 유형은 새 마이그레이션을 추가할 때(코드 우선) 올바르게 매핑되지만,ulong
데이터 유형은 mysql의 EF 공급자가 건너뜁니다.mysql's를 사용하기 위해 속성을 매핑하는 방법unsigned bigint
?
2021년 2월 업데이트
EF Core는 이제ulong
-- @짐밥을 보다선원의 대답은 아래와 같습니다.
이전 엔티티 프레임워크 버전:
Entity Framework가 지원하지 않는 것으로 나타났습니다.unsigned
데이터 유형. 의 경우uint
열, 값을 더 큰 범위의 서명된 데이터 유형에 저장할 수 있습니다(즉, a).long
)는?ulong
기둥?EF가 지원하는 서명된 데이터 유형이 없기 때문에 공통 솔루션이 작동하지 않았습니다.ulong
넘치지 않고
고민 끝에 이 문제에 대한 간단한 해결책을 찾았습니다. 지원되는 데이터에 데이터를 저장하기만 하면 됩니다.long
타이핑하여 에 캐스팅합니다.ulong
접속시.여러분은 생각할 수도 있습니다: "하지만 잠깐, ulong's max value > long's max value!"a long의 바이트를 길게 저장했다가 필요할 때 다시 너무 길게 캐스팅할 수 있습니다. 둘 다 8바이트이기 때문입니다.이렇게 하면 EF를 통해 데이터베이스에 ULong 변수를 저장할 수 있습니다.
// Avoid modifying the following directly.
// Used as a database column only.
public long __MyVariable { get; set; }
// Access/modify this variable instead.
// Tell EF not to map this field to a Db table
[NotMapped]
public ulong MyVariable
{
get
{
unchecked
{
return (ulong)__MyVariable;
}
}
set
{
unchecked
{
__MyVariable = (long)value;
}
}
}
캐스팅은.unchecked
오버플로우 예외를 방지합니다.
누군가에게 도움이 되길 바랍니다.
업데이트 엔티티 프레임워크 코어 2021년 2월
EF Core 3.1: EF Core는 이제 롱 타입과 울롱 타입을 지원합니다.먼저 코드를 사용하여 롱 오랄롱을 EF Core의 새로운 'Decimal Type'에 매핑합니다.
public ulong MyULong{ get; set; } //==> decimal(20, 0)
ulong을 사용하면 데이터베이스에서 십진수가 20자리로 정의되고 십진수 점의 오른쪽에 0자리가 있으므로 64비트 길이를 저장할 수 있습니다.
EF 5: 위의 "EF Core 3.1"이라는 제목 아래 EF 5 및 6에서 울롱은 원래 답변대로 Decimal 타입이 아닌 BigInt에 매핑되어 있음을 알려주신 @Tomasz 님께 감사드립니다.
언급URL : https://stackoverflow.com/questions/26303631/how-to-use-unsigned-int-long-types-with-entity-framework
'programing' 카테고리의 다른 글
INSERT가 없는 상태에서 INSERT 허용 (0) | 2023.09.26 |
---|---|
C#의 @"string"과 같은 파워셸의 문자열을 탈출할 방법이 있습니까? (0) | 2023.09.26 |
MySQL의 Aggregate 함수 - 목록(Oracle의 LISTAGG와 같이) (0) | 2023.09.21 |
Angular의 장점은 무엇입니까?JS Strict DI mode? (0) | 2023.09.21 |
MariaDB Master-Master 설정에 대한 일반적인 생각(업그레이드 절차도 포함) (0) | 2023.09.21 |