我在实体框架中发现了POCO类方法的一些限制,因为实体不能在不保存DbContext引用的情况下自行处理相关查询。我猜代理人私下提到它,我们无法访问它。我想要达到的目标是在模型下面保持追随者,但如果我需要追随者数而不是追随者,所以我不能通过模型来做到这一点,因为模型没有上下文的参考。因此,解决方案是将FollowersCount保留在模型上的映射属性,并在存储库中对其执行查询然后进行设置。这看起来像创建DTO对象而不创建新的DTO。
第二种方法可以在模型属性中显式地再次保持DbContext引用,因为没有映射,然后执行相关的查询。
这两种方法的缺点是手动重复设置每个获取模型中的值。您认为这两种解决方案是什么?有更好的方法吗?
public class Post : Entity
{
public string Title { get; set; }
[NotMapped]
public DbContext Context { get; set; }
public virtual List<User> Followers{ get; set; }
public virtual FollowersCount()
{
return //use DbContext and just execute query for count of Followers
}
}
答案 0 :(得分:3)
这个想法严重破坏了separation of concerns。您将使您的实体依赖于EF =您将使用数据访问代码弄乱您的域模型。如果要使用ORM正确地以ORM方式解决问题。如果您需要关注者的数量,您有两个选择:
Count
- 这是由实体完成的doamin方式域模型的要点是处理加载的对象而不是查询数据库,即数据访问层(存储库,EF,数据访问对象等)。如果您需要在不加载它们的情况下计算关注者数量,请使用:
int count = context.Entry(post)
.Collection(p => p.Followers)
.Query()
.Count();