【问题标题】:EF Core - Ignore field (do not create a column in db) but fill it from raw queryEF Core - 忽略字段(不在数据库中创建列)但从原始查询填充它
【发布时间】:2020-06-17 18:51:08
【问题描述】:

我有一个实体,其字段不应在数据库中创建,但应从存储过程中填充。

public class Item 
{
    public int Id {get; set;}
    public int CalculatedField {get; set;}
}

那我想用存储过程来填充它

var items = _db.Items.FromSqlRaw("select * from StoredProcedure()").ToList()

但是如果我使用[NotMapped] 属性或.Ignore fluent 选项 - EF 字段完全,即使我的存储过程返回CalculatedField,EF 也不会使用它。

有没有办法实现这种行为?

【问题讨论】:

  • “EF 不使用它”是什么意思?您希望 EF 如何使用未映射的属性?
  • @devlincarnate 我想找到一种方法不在数据库中创建字段,而是从 rawQuery 中填充它
  • 那么,是什么阻止你这样做呢?您的原始查询是否不返回该字段的值?
  • @devlincarnate 它会返回它(如果我在 DB 中执行它),但 EF 不会将该字段映射到 storedProccedure 结果,因为它是 [NotMapped]
  • 你可以自己做...创建一个类的实例,并从查询结果中分配属性值。如果您有对象列表,请循环执行。或者使用 LINQ 或 Lambda

标签: c# entity-framework ef-core-3.0 ef-core-3.1


【解决方案1】:

您可以使用查询结果来分配值。有多种方法可以做到这一点。这是一个,您在其中迭代查询结果并实例化一个项目,分配属性值并将其添加到项目列表中:

var items = new List<Item>();
var results = _db.Items.FromSqlRaw("select * from StoredProcedure()").ToList();
foreach(var result in results) {
   var item = new Item {
      Id = result.Id,
      CalculatedField = result.CalculatedField
   }
   items.Add(item);
}

【讨论】:

    猜你喜欢
    • 2020-09-07
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    相关资源
    最近更新 更多