当前,我们使用Where
,然后使用First
通过密钥从数据库中获取项目:
DbSet<DerivedResource> dbSet = GetDBSet();
DerivedResource resource = dbSet.Where(r => r.Guid == guid).Include(r => r.Data).First();
这有效,需要很长时间。我假设调用为O(n),并且在幕后没有发生任何魔术来优化调用。因此,为了加快速度,我改用了以下方法:
DerivedResource resource = dbSet.Find(guid);
这很快,但是导致resource
丢失了一些数据:Data
属性是null
。我该如何填写此数据,或者如何通过键快速检索项目?
以下是我正在使用的类的草图。我怀疑DerivedResource : BaseResource
无关紧要的事实:
[Table("DerivedResource")]
public class DerivedResource : BaseResource<DerivedResource>
{
public BaseData Data { get; set; }
}
[Table("DerivedResource_BaseData")]
public abstract class BaseData
{
[JsonIgnore]
[Required]
[ForeignKey("DerivedResourceGuid")]
public DerivedResource DerivedResource { get; private set; }
[JsonIgnore]
[Key]
[Required, Column("DerivedResourceID")]
public Guid DerivedResourceGuid { get; set; }
}
[Table("DerivedResource_BaseData_DerivedData")]
public class DerivedData : BaseData { }
public abstract class BaseResource<T>
{
[Key]
[Column("ID")]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Guid { get; set; }
public virtual void DoSomething<T>(T t) { }
}
我是Entity的新手,非常感谢您的帮助。我正在使用EF6。(如果使用EF Core特别容易,我不会介意。)