我正在制作一个图片网站,我想知道如何构建我的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; }
}
我有以下表格:图片,标签,ImageTag
现在,我想知道当我在ImageRepository中调用CreateImage方法时,我是否还要在Tags表中创建Tags并在ImageTag表中创建映射?
同样,当我调用UpdateImage时,我是否应该检查标签是否已更改,如果他们已经删除了ImageTag表中的条目并添加了不同的条目(以及可能在标签表中添加新标签)?
或者这两个用例是否应该在单独的存储库调用中发生?
基本上,这个父/子,一对多关系如何在典型的linq to sql存储库中处理?
答案 0 :(得分:2)
我想说,了解模型中实体之间的关系并不是存储库的责任。毕竟,如果您要更改持久化数据的方式(例如,更改为无SQL解决方案,或者即使您只是更改数据库模式),您的实体和模型也不应更改。
所以你最好的办法是拥有单独的存储库调用,并将调用包装在一个工作单元内。 (A Unit of Work基本上是一个抽象的交易)。
您的工作单元和对存储库的各种调用将是存储库上方的一个抽象层。我不知道你的模型的其余部分,所以这可能是不同的事情。它可能是Image对象上的一个方法。你可以拥有Mediator。或者,如果您从DDD角度来看这是一个域服务。
干杯。