`DbSet <T> .Find`返回“不完整”`T`

时间:2019-10-18 17:06:45

标签: entity-framework

当前,我们使用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特别容易,我不会介意。)

0 个答案:

没有答案