zoukankan      html  css  js  c++  java
  • 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 (下一节)将演示以模型为中心更简洁的方式来解决这个问题.

  • 相关阅读:
    ASCII码详解
    C#中判断上传类型为Excel,03和07版的链接字符串
    文本搜索工具的制作过程之搜索
    文本搜索工具之显示
    用C#实现十六进制字符串转换为ASCII
    7个秘诀 工作效率和薪水都翻倍
    C#委托
    VB的写法,关于版本写入注册表
    k8s 集群灾难恢复 k8s
    k8s 接合阿里云负载均衡 k8s
  • 原文地址:https://www.cnblogs.com/kid1412/p/5498081.html
Copyright © 2011-2022 走看看