c# – SqlQuery进入[NotMapped]字段?

我有一个工作得很好的实体,但后来我需要处理另一个来自另一个表的属性.我没有能够创建一个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

最佳答案 我在使用存储过程进行带有计算字段的选择时遇到了同样的问题.我创建了一个看起来与我的实体完全一样的视图模型而没有db注释.然后在使用视图模型调用我的存储过程后,我选择进入我的实体.所以,使用上面的例子:

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();
    }
}

希望这可以帮助.

点赞