gpt4 book ai didi

c# - SqlQuery 到 [NotMapped] 字段?

转载 作者:太空狗 更新时间:2023-10-29 23:45:30 25 4
gpt4 key购买 nike

我有一个运行良好的实体,但我需要添加来自另一个表的附加属性。我没有创建 View 的能力,所以我只想添加一个 [NotMapped] 字段,然后使用 Context.Database.SqlQuery 执行我的自定义语句并返回所有普通字段和这个新字段。

换句话说是这样的:

public class Employee
{
public int EmployeeId { get; set; }
public string EmployeeName { get; set; }
[NotMapped]
public string CustomerName { get; set; }
}

public List<Employee> GetEmployees()
{
using (MyContext context = new MyContext())
{
return context.Database.SqlQuery<Employee>("select E.EmployeeId, E.EmployeeName, C.CustomerName from Employee E left join Customer C on E.CustomerId = C.CustomerId").ToList();
}
}

是的是的,这不是最好的例子,但却是表达观点的最简单方法。从我一直在阅读的所有内容来看,SqlQuery 应该忽略属性,所以这应该有效,但我的 CustomerName 总是返回 null(我在 Management Studio 中运行 SQL,它在那里有一个值,只是在 EF 反序列化之后进入我的对象)。

我需要做什么才能让它发挥作用?或者我可以吗? EF 是否更改为不允许这样做?

-shnar

最佳答案

我在使用存储过程对计算字段进行选择时遇到了同样的麻烦。我创建了一个 View 模型,它看起来与我的实体完全一样,没有数据库注释。然后在我使用 View 模型调用我的存储过程后,我选择进入我的实体。因此,使用上面的示例:

public class EmployeeVM
{
public int EmployeeId { get; set; }
public string EmployeeName { get; set; }
public string CustomerName { get; set; }
}

然后你可以调用:

public List<Employee> GetEmployees()
{
using (MyContext context = new MyContext())
{
return context.Database.SqlQuery<EmployeeVM>("select E.EmployeeId, E.EmployeeName,
C.CustomerName from Employee E left join Customer C on E.CustomerId = C.CustomerId")
.Select(x=> new Employee(){
EmployeeId = x.EmployeeId,
EmployeeName = x.EmployeeName,
CustomerName = x.CustomerName
}).ToList();
}
}

希望这对您有所帮助。

关于c# - SqlQuery 到 [NotMapped] 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25391619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com