存储库模式:编辑/删除方法的方法签名

时间:2011-02-02 20:24:25

标签: c# repository-pattern

我正在尝试自学存储库模式,我有一个最佳实践问题。

想象一下,我有实体(这是一个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?

我正在努力思考什么才是最合乎逻辑,最明确的方法呢,但是我很困惑,所以我想问一下!

谢谢!

2 个答案:

答案 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