我正在尝试自学存储库模式,我有一个最佳实践问题。
想象一下,我有实体(这是一个linq to sql实体,但为了清晰起见,我已将所有linq剥离为sql代码和数据注释属性):
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string Surname { get; set; }
public string Telephone { get; set; }
}
到目前为止,我界面的抽象仓库是:
public interface IPersonRepository
{
IQueryable<Person> Person { get; }
void Add(Person person);
void SubmitChanges();
// I want an Edit method here
// I want a Delete method here
}
我的问题是:编辑/删除方法的方法签名是什么?这些最佳做法是什么?如果Id例如是Person的唯一“不可编辑”(即键)属性,您将如何实现它?
编辑是否应该使用Person参数,然后编辑方法代码使用提供的ID查找实体并编辑该方式?
应该删除一个Person参数,还是只是一个id?
我正在努力思考什么才是最合乎逻辑,最明确的方法呢,但是我很困惑,所以我想问一下!
谢谢!
答案 0 :(得分:4)
我通常将它们(实体和Id)用于删除:
void Delete(Person person);
void DeleteById(int personId);
和一个用于保存的实体:
void Save(Person person);
您可能还会考虑为标准CRUD操作创建一个通用基础存储库:
public interface IBaseRepository<T>
{
T GetById(Guid id);
IList<T> GetAll();
void Delete(T entity);
void DeleteById(Guid id);
void Save(T entity);
}
如果您只需要Save(T entity)
或Insert(T entity)
而Update(T entity)
取决于您的架构。
答案 1 :(得分:1)
您的删除方法应如下所示。
void Delete(Person person);
如果您需要更通用的模式方法,请查看此博文:Entity Framework Repository & Unit Of Work T4 Template