Samra
Samra

Reputation: 2013

How to find entity with composite key in Entity Framework

I have an existing database on which I am using code-first EF. Now the database has a table with a composite key. I define this table in the code as follows

public class AssessmentResultType
{
    [Key]
    [Column(Order=1)]
    public int AssessmentID {get; set;}
    public int ResultType {get; set;}
    [Key]
    [Column(Order=2)]
    public int ResultTypeID {get; set;}
    .....
}

My repository is

 public class AssessmentResultTypeRespository : Repository<AssessmentResultType>
{
    public AssessmentResultTypeRespository(string connString)
        :base(connString)
    { }
}

Repository.cs

public class Repository<TEntity> : IRepository<TEntity> where TEntity:class
{
    protected readonly GradeXpertContext context;

    public Repository(string connString) {
        context = new ge(connString);
    }

    public TEntity Get(int id)
    {
        return context.Set<TEntity>().Find(id);
    }

    public IEnumerable<TEntity> GetAll() { 
        return context.Set<TEntity>().ToList(); 
    }

    public void Add(TEntity entity) {
        context.Set<TEntity>().Add(entity);
    }

    public void AddRange(IEnumerable<TEntity> entities) {
        context.Set<TEntity>().AddRange(entities);
    }

    public void Remove(TEntity entity) {
        context.Set<TEntity>().Remove(entity);
    }

    public void RemoveRange(IEnumerable<TEntity> entities) {
        context.Set<TEntity>().RemoveRange(entities);
    }
}

How do I adjust/override the above code to accept composite key only in case of AssessmentResultType? So that I can write

var art1 = repAssResultType.Get(32, 4);

Upvotes: 2

Views: 3048

Answers (1)

Slava Utesinov
Slava Utesinov

Reputation: 13498

Just change one method:

public TEntity Get(params object[] keyValues)
{
     return context.Set<TEntity>().Find(keyValues);
}

Upvotes: 6

Related Questions