0

에 매핑하십시오. 먼저 Entity Framework 6 코드를 사용하여 MySql 데이터베이스에 연결합니다. 나는 데이터베이스를 소유하고 있지 않습니다. I 데이터베이스 스키마를 변경할 수 없습니다. 또한 Entity Framework의 다른 풍미 (모델 또는 데이터베이스)를 변경할 수 없습니다. 나는 특정 테이블에 내 POCO 개체를 매핑하는 데 문제MySql을 사용하는 Entity Framework : System.Guid를 VARCHAR (40)

표는 다음과 같다 : 나는 'ID'열은 항상 GUID가 될 것이라는 사실을 알고

CREATE TABLE 'my_table' (
    'id' VARCHAR(40) NOT NULL, 
    'name' VARCHAR(200), 
    Primary Key ('id') 
) 

. MySQL의에 대한 나의 이해 EF에서

public class MyTable 
{ 
    public Guid Id { get; set;} 
    public string Name { get; set;} 
} 

은 당신의 POCO의 문자열 필드에 VARCHAR 컬럼을 매핑합니다 다음과 같이 그러므로 나는 내 POCO 클래스를 만들었습니다. 엔티티 프레임 워크에 'id'열을 VARCHAR (40)에서 Guid로 변환해야한다고 말할 수있는 방법이 있습니까?

내가 Guid에 매핑 할 수 없다고 생각하고있었습니다. 문자열에 매핑하고 맞춤 getter 메소드를 만들면됩니다.

EF newb를 도와주세요. 감사합니다

답변

0

나는 이것을 할 수있는 방법을 찾지 못했습니다. VARCHAR (40)을 Guid로 구문 분석 할 수 없으면 엔티티 프레임 워크에서 예외가 발생하기를 바라고 있습니다. MySQL 공급 업체의 경우는 그렇지 않습니다.

문자열로 ID 멤버를 선언했습니다. 내 POCO 클래스를 진정한 POCO 클래스로 유지하기 위해 문자열을 Guides로 변환하는 도우미 메서드를 만들었습니다.

0

인터페이스를 사용하고 명시 적으로 구현할 수 있습니다.

public interface IMyTable 
{ 
    Guid Id { get; set; } 
    string Name { get; set; } 
} 

public class MyTable : IMyTable 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 

    // use explicit implementation for Id 
    Guid IMyTable.Id 
    { 
    get => Guid.Parse(this.Id); 
    set => this.Id = value.ToString(); 
    } 
} 

MyTable을 사용하는 대신 IMyTable을 사용하여 예상되는 유형의 필드가있는 개체를 가져올 수 있습니다.

관련 문제