在通用存储库中放置字符串而不是Id的方法

时间:2017-10-10 12:29:20

标签: c# entity-framework generics asp.net-web-api repository-pattern

我有一个PUT的通用存储库方法,工作正常,在这里它通过主键ID的EF的泛型方法找到。
我要找的是我想基于特定列更新记录,其值是字符串类型。有可能这样做吗?

public virtual TEntity GetByID(object id)
{
    return DbSet.Find(id);
}

1 个答案:

答案 0 :(得分:1)

根据您在评论中所说的内容,您所有的实体都拥有您要查找和更新的列。像这样:

public class EntityBase
{
    public string LookupCol { get; set; }
    public string Col1 { get; set; }
    public string Col2 { get; set; }
}

假设这是真的,您可以执行以下操作:

public class GenericRepo<TEntity> where TEntity : EntityBase
{
    ...

    public void UpdateByStringColumn(string lookupCol, string col1Value, string col2Value)
    {
        //if you want it to break in case no entity was found, change it to First and remove the sanity check
        var entity = this.DbSet.FirstOrDefault(p => p.LookupCol == lookupCol); 
        if (entity != null) 
        {
            entity.Col1 = col1Value;
            entity.Col2 = col2Value;
            Context.SaveChanges();
        }
}

}