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存储过程

我也有类似的问题。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()});
    }