我正在尝试理解 Entity Framework 的基础知识,并且有一个关于 DbContext
上的 Set<>
方法的问题。在下面的问题中,我使用的是数据库优先模型。
假设我有一个 ActivityLog
数据库,其中包括一条消息(例如 NLog 消息),我可以编写一些代码来提取所有消息,如下所示:
using (var entities = new ActivityLogEntities())
foreach (var log in entities.AcitivityLogs)
Console.WriteLine(log.Message);
然而,我也可以通过这样做来实现同样的效果:
using (var entities = new ActivityLogEntities())
foreach (var message in entities.Set<ActivityLog>().Select(entity => entity.Message))
Console.WriteLine(message);
我的问题是这两个陈述之间有什么区别?何时更适合使用其中之一?或者这只是个人喜好的问题?
ActivityLogs
属性,则无法使用ActivityLogs
属性。这似乎是一个无用的回答,但我曾经遇到过这样的情况:我需要访问一个类型的DbSet<T>
,而该类型故意没有直接的实体属性。但这并没有回答当两者都可能时应该使用哪个的问题。 - user743382public class Order { public ICollection<OrderLine> Lines { get; set; } } public class OrderLine { } public class Context { public IDbSet<Order> Orders { get; private set; } }
。不需要进行额外的工作就可以使其正常工作,而且通常情况下在没有订单的情况下访问OrderLines
也没有意义,那么为什么我要在上下文层面添加一个OrderLines
属性呢? - user743382