programing

엔티티 프레임워크에서 서명되지 않은 int/long 유형을 사용하는 방법은 무엇입니까?

newstyles 2023. 9. 21. 20:10

엔티티 프레임워크에서 서명되지 않은 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