簡體   English   中英

在Entity Framework 6.2中獲取每個相關實體

[英]Getting every related entity in Entity Framework 6.2

public class Service
{
    public int Id { get; set; }
    public string Title { get; set; }
}

public class Store
{
    public int Id { get; set; }
    public virtual Service Service { get; set; }
}

public class Product
{
    public int Id { get; set; }
    public virtual Service Service { get; set; }
}

public class Operation
{
    public int Id { get; set; }
    public virtual Service Service { get; set; }
}

我有一個在其他實體中使用的Service實體。 我想獲取所有使用Service實體。

我的意思是獲取使用Service的實體的列表,如下所示:

public virtual Service Service { get; set; }

在實體框架中可能嗎?

您可以通過反射來完成。 近似代碼,其中Assembly.GetExecutingAssembly()可以用適當的Assembly / Assemblies替換:

var types = Assembly.GetExecutingAssembly().GetTypes()
            .Where(x => x.GetProperties().Any(y => y.PropertyType == typeof(Service)))
            .ToList();

(instance.GetType().GetProperties().Where(y => y.PropertyType == typeof(DbSet<Service>))
.First().GetValue(instance) as DbSet<Service>).Add(newItem);

添加導航ServiceId並使用它。 您可能正在顯示代碼的簡化,但是我會做這樣的事情:

public class Service
{
    public int Id { get; set; }
    public string Title { get; set; }
    public List<ObjectUsingService> MyServiceUsers {get; set;
}

public ObjectUsingService
{
    public int? ServiceId {get; set;}
    public virtual Service Service { get; set; }
}

public class Store : ObjectUsingService
{
    public int Id { get; set; }
}

//...

然后從另一端查詢EF:

_context.Services.Include(s => s.MyServiceUsers).Where(s => s.MyServiceUsers.Any())

一級繼承在EF中是可行的,但要當心,如果您過度使用它,可能會變得凌亂。 沒有通過這種方式連接它們的問題還算不錯,您只需要分開請求每個實體。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM