• Entity Framework 6 Recipes 2nd Edition(13-7)译 -> 返回只部分填充的实体


    问题

    你有一个实体里的某个属性很少被读取或和更新,这个属性因为比较大,所以读取和更新都需要付很大的代价.你想有选择的放置这个属性

     

    解决方案

    假设你有一个如Figure 13-9 所示的模型

    Figure 13-9. A model with a Resume entity with a Body property that contains the entire text of the applicant’s resume

     

             我们可以通过使用上下文的SqlQuery()方法来直接执行SQL语句,来避免加载实体的一个或多个属性.代码Listing 13-21 展示了这种方式

    Listing 13-21. Returning Partially Filled Entities Using Both eSQL and ExecuteStoreQuery()

                using (var context = new EFRecipesEntities())

                {

                    var r1 = new Resume

                    {

                        Title = "C# Developer",

                        Name = "Sally Jones",

                        Body = "...very long resume goes here..."

                    };

                    context.Resumes.Add(r1);

                    context.SaveChanges();

                }

                using (var context = new EFRecipesEntities())

                {

                    // using SqlQuery()

                    var result1 =

                    context.Resumes.SqlQuery

                    ("select ResumeId, Title, Name,'' Body from chapter13.Resume",

                    "Resumes", MergeOption.AppendOnly).Single();

                    Console.WriteLine("Resume body: {0}", result1.Body);

                    var result2 =

                    context.Database.SqlQuery<Resume>("select * from chapter13.Resume", "Resumes",

                    MergeOption.OverwriteChanges).Single();

                    Console.WriteLine("Resume body: {0}", result2.Body);

                }

     

    它是如何工作的

    获取部分填充的实体是一个方式是通过SqlQuery()方法,该方法是静态的Database对象暴露的,该对象可以从DbContext对象访问.此处我们执行SQL语句来获取除了Body之外的所有属性,Body属性我们只是用空的字符串初始化它.如需要加载,我们通过设置MergeOption值为MergeOption.OverwriteChanges并重新查询数据库.注意,我们的第二个查询将覆盖我们已经对内存中对象的所有修改.记住这种方式会SQL查询是字符串的,没有编译时查检和智能提示.

             Recipe 13-8 (下一节)将演示以模型为中心更简洁的方式来解决这个问题.

  • 相关阅读:
    对自己负责~~
    继续负责
    问题的一天
    1个月=22年
    刚才写的没显示?
    布置任务
    心情很糟
    考试结束
    没有负责哈
    php获取任意时间的时间戳
  • 原文地址:https://www.cnblogs.com/kid1412/p/5498081.html
Copyright © 2020-2023  润新知