EF存储过程

时间:2011-07-13 12:13:04

标签: c# entity-framework stored-procedures

我正在使用EF 4.1,我的数据库中有一个存储过程,我将它映射到EF模型并添加了一个函数import

我需要做类似的事情:

        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 to Entities无法识别该方法   'System.Data.Objects.ObjectResult 1[System.String] GetUser(System.Nullable 1 [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; }
    }

1 个答案:

答案 0 :(得分:0)

我有类似的问题。 EF根据您的LINQ表达式创建表达式树会发生什么,并且它无法转换all.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()});
    }
相关问题