【问题标题】:ef get fields only in base classef 仅在基类中获取字段
【发布时间】:2013-05-28 07:37:18
【问题描述】:
public class baseEntity
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
}


public class ProjectEntity : baseEntity
{
    public string Address { get; set; }
    public string PhoneNo { get; set; }
}


public class ProcessEntity : baseEntity
{
    public string TypeName { get; set; }
    public int Steps { get; set; }
}

public class DBContext : DbContext
{
    public DBContext() : base("DefaultConnection") 
    {

    }
    public DbSet<baseEntity> BaseEntities { get; set; }

}

DBContext db = new DBContext();
var list = from p in db.BaseEntities select p

这将从 baseentity 获取所有字段。无论它是 BaseEntity、ProcessEntity 还是 ProjectEntity。

我想只获取BaseEntity中的字段(只有ID,Name),怎么办?

var list = from p in db.BaseEntities select new {p.ID,p.Name}

这不是我想要的。因为我的项目中有很多字段。我不喜欢这样写代码

var list = from p in db.BaseEntities select new {p.ID,p.Name,p.xxx .....................}

【问题讨论】:

    标签: entity-framework poco base-class


    【解决方案1】:

    试试:

    var list = from p in db.BaseEntities.OfType<baseEntity>() select p
    

    但是,请记住,要生成的实际 Sql 查询取决于您的 Inheritance Strategy (TPT/TPH/TPC)。

    【讨论】:

      【解决方案2】:

      ofType 可以完成这项工作。谢谢。但是还有更多的字段和更多的继承类将添加到这个项目中。

      var list = from p in db.BaseEntities.OfType<baseEntity>() select p
      

      会生成一个很复杂的sql。我尝试 list.toString() 获取sql并复制到SQL Server Management Studio,内容超过8000行。如何提高性能?

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多