1

In our WebApi project we use EF CodeFirst approach. Also we use 2 types of databases: SQL Server and MySQL. All tables have the field ID, but in SQL Server database this field has int data type, in MySQL database this field is char(36) and contains GUID.

To solve the problem I created a custom value type like IdType and changed all model classes to use that type insted int:

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

Then I configured the DbContext (e.g for SQL Server)

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

...and changed repository:

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

After that, when I try to go to e.g. http://localhost:7081/api/Document, it gives me an error:

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

I use default settings of routing. Here is [HttpGet] methods from DocumentController:

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

How can I solve the problem? Could this be the cause of incorrect implementation of IdType?

P.S. I created IdType for int values as described here. if I have to add more informations, please let me know.

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

My repository:

 public virtual T GetById(IdType id)
 {
    return GetAll().FirstOrDefault(x => x.ID == id);
 }
 public virtual IQueryable<T> GetAll()
 {
   return entities = context.Set<T>();
 }
Community
  • 1
  • 1
Roman Marusyk
  • 23,328
  • 24
  • 73
  • 116

1 Answers1

0

It seems that it not implemented yet in current version of Entity Framework

And as mentioned in task on GitHub

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

Roman Marusyk
  • 23,328
  • 24
  • 73
  • 116