您应该如何处理存储库模式中的父实体和子实体?

Vik*_*tor 5 c# repository-pattern linq-to-sql

我正在制作一个图像网站,我想知道如何构建我的Linq to Sql存储库中的Create/Update方法?

我有一个Photo实体,结构如下:

public class Image
{
    public int ID { get; set; }
    public int OwnerId { get; set; }
    public string Url { get; set; }
    public IEnumerable<Tag> Tags { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有以下表格:图像,标签,ImageTag

现在,我想知道当我在ImageRepository中调用我的CreateImage方法时,我是否还应该在Tags表中创建Tags并在ImageTag表中进行映射?

同样,当我调用UpdateImage时,我应该检查标签是否已更改,如果他们已经删除了ImageTag表中的条目并添加了不同的条目(以及可能在标签表中添加新标签)?

或者这两个用例是否应该在单独的存储库调用中发生?

基本上,这个父/子,一对多关系如何在典型的linq到sql存储库中处理?

Nik*_*ski 2

我想说,理解模型中实体之间的关系不是存储库的责任。毕竟,如果您要更改保存数据的方式(例如,更改为无 SQL 解决方案,或者即使您只是更改数据库架构),您的实体和模型不应更改。

因此,最好的选择是进行单独的存储库调用,并将这些调用包装在一个工作单元中。(工作单元基本上是一个抽象的事务)。

您的工作单元和对存储库的各种调用将是存储库之上的抽象层。我不知道你的模型的其余部分,所以这可能是不同的事情。它可以是 Image 对象上的方法。你可以有一个Mediator。或者,如果您从 DDD 角度来处理此问题,则可以使用领域服务。

干杯。