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# 如何在不显式设置每个属性的情况下加载实体框架数据对象_C#_Entity Framework - Fatal编程技术网

C# 如何在不显式设置每个属性的情况下加载实体框架数据对象

C# 如何在不显式设置每个属性的情况下加载实体框架数据对象,c#,entity-framework,C#,Entity Framework,我希望能够做到以下几点: var book = new Book(); book.LoadByPrimaryKey(id); //returns bool 我遇到的问题是,我不知道是否有一种简单的方法可以将数据加载到使用实体框架生成的对象中。我知道如何获取填充对象所需的信息,但是有没有一种简单的方法可以填充对象的所有属性,而不必显式地遍历每个属性并将其设置为所需的值?在C#中,我不能简单地键入: this = db.Books.Single(d => d.BookId == id);

我希望能够做到以下几点:

var book = new Book();
book.LoadByPrimaryKey(id); //returns bool
我遇到的问题是,我不知道是否有一种简单的方法可以将数据加载到使用实体框架生成的对象中。我知道如何获取填充对象所需的信息,但是有没有一种简单的方法可以填充对象的所有属性,而不必显式地遍历每个属性并将其设置为所需的值?在C#中,我不能简单地键入:

this = db.Books.Single(d => d.BookId == id);
相反,我必须显式设置每个属性:

var book = db.Books.Single(d => d.BookId == id);
this.Title = book.Title;
this.PageCount = book.PageCount;
...

当想要加载一个对象时,有没有办法做到这一点?也许有DbDataReader?我使用数据读取器加载数据表,但不知道如何使用它们填充对象。也许我想得太多了。

当您需要将所有属性从一个对象复制到另一个对象时,您可以

  • 只需编写代码(打字练习)
  • 使用
  • 使用
  • 使用
  • 如前所述:

  • 只需编写代码(打字练习)
  • 使用
  • 使用
  • 使用
  • 他给你的答案是正确的。但我想扩展它并解释原因

    首先,让我们在这里提出一些概念。当我们进一步研究编程技术时,有时,工作答案是不够的。虽然你试图做的是一个有效的解决问题的办法,但也有一些问题

    第一个字母代表单一责任原则。这意味着一个对象应该只有一个职责

    您的方法存在的问题是,您将多个责任放在一个对象中:

  • 保存/传送有关书籍的信息
  • 从远程服务器(本例中为数据库)加载有关书籍的信息
  • 你可能在发布这篇文章之前在谷歌上搜索过这个问题,我怀疑你没有发现任何有用的东西。现在你什么也没发现是因为这是一个糟糕的方法,它违背了坚实的概念,它打破了一些可能的相互作用。所以这就是为什么你可能什么也没发现,之前没有想到解决这个问题的工具,因为这是一种令人沮丧的方法,所以没有人,只要稍微了解一下程序技术,就会帮助你

    因此,我们回到大卫·布朗给你的答案。使用(最简单的建议)。你需要改变你的方法。考虑将不同职责中的每个职责分开:

    class BookDA // DAO = data access
    {
        private MyDbConnection db;
    
        public BookTO Get()
        {
            var book = db.Books.Single(d => d.BookId == id);
    
            return book;
        }
    }
    
    class BookTO // TO = transport object
    {
        public string Name { get; set; }
    }
    

    在上面的代码中,每个职责都与不同的类相关联。这个答案太长了,但我希望它能有所帮助。

    用例是什么,即为什么需要它
    db.Books.Single(d=>d.BookId==id)
    已经返回一个(新的)加载的对象。这不是EF的用途。EF是一个严格的ORM,具有更方便的功能。其他ORM将此作为其包的一部分。我们目前使用EntitySpaces并将其升级到EntityFramework,因为ES不再受支持。是的,我们可能最终不得不做一件或多件这样的事情。我们正在将一个使用EntitySpace(具有内置加载方法)的遗留软件更改为使用EF6?我需要创建一个新的、不同的类,将所有运行查询和存储过程的方法放在其中?是的,这就是我的想法。