【发布时间】:2016-06-02 11:57:23
【问题描述】:
我有以下与Entitry Framework 一起使用的数据库上下文
public class MainContext: DbContext
{
public MainContext()
: base("name=MainContext")
{ }
public virtual DbSet<Device> Devices { get; set; }
public virtual DbSet<Point> Points { get; set; }
}
使用以下领域模型
public class Point
{
[Key]
public int Id { get; set; }
public string Info { get; set; }
public DateTime FixTime { get; set; }
public int DeviceId { get; set; }
public virtual Device Device { get; set; }
}
public class Device
{
[Key]
public int Id { get; set; }
public int SomeValue { get; set; }
public virtual ICollection<Point> Points { get; set; }
public bool IsActive()
{
Point lastPoint = Points.LastOrDefault();
if (lastPoint == null)
{
return false;
}
else
{
var diff = DateTime.Now - lastPoint.FixTime;
if (diff.TotalSeconds > 10 )
{
return false;
}
else
{
return true;
}
}
}
}
我在 Device 类中调用 IsActive() 方法时遇到了巨大的性能问题。据我所知,这是因为调用 Points.LastOrDefault() 查询设备的所有可用数据库记录,而不是唯一一个。我知道这是因为在我的课堂上使用了 ICollection,但这是实体框架的需求。在这种情况下有什么方法可以查询唯一的记录还是只是我把方法放在了错误的地方?
【问题讨论】:
标签: c# entity-framework domain-model