2015-11-19 85 views
1

在我們的WebApi項目中,我們使用EF CodeFirst方法。我們還使用兩種類型的數據庫:SQL Server和MySQL。所有的表都有字段ID,但是在SQL Server數據庫中這個字段有int數據類型,在MySQL數據庫中這個字段是char(36)並且包含GUID自定義值類型,EF代碼優先和路由

爲了解決我創建了一個自定義的值類型一樣IdType,並改變了所有的模式類使用該類型insted的int問題:

public class Document 
{ 
    public IdType ID { get; set; } 
    public string DocumentNm { get; set; } 
    ... 
} 

然後我配置的DbContext(如SQL Server)的

modelBuilder.Properties<IdType>().Configure(c => c.HasColumnType("int")); 

...並改變存儲庫:

public interface IRepository<T> where T : IEntity 
{ 
    IQueryable<T> GetAll(); 
    T GetById(IdType id); 
    ... 
} 

之後,當我嘗試去例如http://localhost:7081/api/Document,它給我一個錯誤:

Multiple actions were found that match the request: \r\nGet on type WebUI.Controllers.API.DocumentController\r\nGetById on type WebUI.Controllers.API.DocumentController

我使用路由的默認設置。下面是從DocumentController [HttpGet]方法:

public HttpResponseMessage Get() { ... } 
public HttpResponseMessage GetById(IdType id) { ... } 

我怎樣才能解決這個問題?這可能是造成IdType錯誤的原因嗎?

P.S.我爲here所描述的int值創建了IdType。如果我必須添加更多信息,請告訴我。

UPDATE

DocumentController:

public HttpResponseMessage GetById(IdType id) 
{ 
    var entity = repository.GetById(id); 

    if (entity == null) 
    {     
     return ErrorMsg(HttpStatusCode.NotFound, string.Format("No {0} with ID = {1}", GenericTypeName, id);); 
    } 

    return Request.CreateResponse(HttpStatusCode.OK, entity); 
} 

我的資料庫:

public virtual T GetById(IdType id) 
{ 
    return GetAll().FirstOrDefault(x => x.ID == id); 
} 
public virtual IQueryable<T> GetAll() 
{ 
    return entities = context.Set<T>(); 
} 
+0

您可以添加IdType類型和GetById方法嗎? – ivamax9

+0

@Chase我更新了問題並添加了GetById方法。 IdType有更多的代碼,你可以在[GitHub]中看到它(https://github.com/Marusyk/SmartVillageOnline/blob/IdType/Domain/Concrete/IdType.cs) – Marusyk

+0

好的,所以目前的代碼是好的,你可以添加repository.GetById? – ivamax9

回答

0

它似乎不是在當前版本的實體框架的

而且尚未實現在task on GitHub中提到

we're currently planning to work on lighting this feature up after our initial RTM of EF7.

+0

感謝您的信息 – Marusyk

+0

我會更新答案,如果有這個動作 – Marusyk