2016-08-31 36 views
0

我首先使用Entity Framework 6代碼連接到MySql數據庫。我不擁有數據庫。我不能更改數據庫架構。我也不能改變爲另一種實體框架(首先是模型或數據庫)。使用MySql的實體框架:將System.Guid映射到VARCHAR(40)

我無法映射我POCO對象特定表

表如下:

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

我知道一個事實,即「ID」列將永遠是一個GUID 。因此,我創建了我的POCO類,如下所示:

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

從我的理解EF爲MySQL將僅VARCHAR列映射到你的POCO字符串字段。有什麼辦法可以告訴實體框架,'id'列應該從VARCHAR(40)轉換爲Guid?

我在考慮接受我無法映射到Guid。我只是映射到一個字符串並創建一個自定義getter方法:

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

    public Guid GetId() 
    { 
     Guid id; 
     if (Guid.TryParse(this.Id, out id)) 
      return id; 
     else 
      return new Guid(); 
    } 
} 

請幫助一個EF newb。謝謝

回答

0

我找不到辦法做到這一點。我希望如果VARCHAR(40)不能被分析爲Guid,那麼實體框架只會引發異常。 MySQL提供者並不是這種情況。

我最終宣佈我的Id成員是一個字符串。爲了讓我的POCO類成爲一個真正的POCO類,我創建了一個輔助方法將字符串轉換爲Guid。

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(); 
    } 
} 

因此,可以使用IMyTable獲取具有預期類型的​​字段的對象,而不使用MyTable。