EF存储过程
本文关键字:存储过程 EF | 更新日期: 2023-09-27 18:01:52
我正在使用EF 4.1,我在数据库中有一个存储过程,我将它映射到EF模型,我添加了一个函数导入
我需要这样做:
MyDataContext db= new MyDataContext();
var x = from all in db.Allergies
select new MyAllergy
{
Name = all.Name,
Id = all.Id,
user = db.GetUser(all.ChangeInfo.CreatedBy).FirstOrDefault()
};
但是这个异常抛出:
对实体的LINQ不识别该方法'System.Data.Objects.ObjectResult
1[System.String] GetUser(System.Nullable
[System.Int64])'方法,以及此方法不能翻译成存储表达式。
虽然这工作良好:var user = db.GetUser(1).FirstOrDefault()
public class MyAllergy
{
public int Id { get; set; }
public string Name { get; set; }
public string User { get; set; }
}
public class Allergy
{
public int Id { get; set; }
public string Name { get; set; }
public ChangeInfo ChangeInfo { get; set; }
}
public class ChangeInfo
{
public long CreatedBy { get; set; }
}
我也有类似的问题。EF基于你的LINQ表达式创建表达式树,它不能翻译所有的。changeinfo。CreatedBy,它会把它作为字符串传递,这就是为什么你会得到关于字符串/长表达式的异常。
我最终要做的,是预先获取all.ChangeInfo.CreatedBy值。对我来说就容易多了。在您的情况下,您可以使用常规的foreach循环:(
像这样:
var myItems = new List<MyAllergy>();
foreach (var item in db.Allergies)
{
var createdBy = item.ChangeInfo.CreatedBy;
myItems.Add(new MyAlergy {Name = item.Name, Id = item.Id, user = db.GetUser(createdBy).FirstOrDefault()});
}