Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF存储过程_C#_Entity Framework_Stored Procedures - Fatal编程技术网

C# EF存储过程

C# EF存储过程,c#,entity-framework,stored-procedures,C#,Entity Framework,Stored Procedures,我正在使用EF4.1,我的数据库中有一个存储过程,我将它映射到EF模型,并添加了一个函数导入 我需要这样做: MyDataContext db= new MyDataContext(); var x = from all in db.Allergies select new MyAllergy { Name = all.Name,

我正在使用EF4.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 to实体无法识别该方法 'System.Data.Objects.ObjectResult
1[System.String]
GetUser(System.Nullable
1[System.Int64])方法,以及此方法 无法转换为存储表达式

尽管这样做很好:
var user=db.GetUser(1.FirstOrDefault()

编辑:


我也有类似的问题。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()});
    }
var myItems=new List();
foreach(数据库中的变量项)
{
var createdBy=item.ChangeInfo.createdBy;
添加(新的MyAlergy{Name=item.Name,Id=item.Id,user=db.GetUser(createdBy.FirstOrDefault());
}

但我不想将所有数据都存储到内存中
    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()});
    }