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
Entity framework 将sql视图映射到EF 6中的现有实体?_Entity Framework - Fatal编程技术网

Entity framework 将sql视图映射到EF 6中的现有实体?

Entity framework 将sql视图映射到EF 6中的现有实体?,entity-framework,Entity Framework,我有一个表dbo.Tasks,一个任务类,一个任务映射,并将其添加到DB上下文中没有问题。我还有一个返回任务的数据库视图dbo.vwComplexTaskQuery。如何将此视图映射到任务类?我希望能够做到: List<Task> Tasks = db.vwComplexTaskQuery.ToList(); 简化任务映射类 public TaskMap() { // Primary Key this.HasKey(t =

我有一个表dbo.Tasks,一个任务类,一个任务映射,并将其添加到DB上下文中没有问题。我还有一个返回任务的数据库视图dbo.vwComplexTaskQuery。如何将此视图映射到任务类?我希望能够做到:

List<Task> Tasks = db.vwComplexTaskQuery.ToList();  
简化任务映射类

        public TaskMap()
    {
        // Primary Key
        this.HasKey(t => t.TaskId);
        this.Property(t => t.Title)
            .IsRequired()
            .HasMaxLength(50);

        // Table & Column Mappings
        this.ToTable("Tasks");
        this.Property(t => t.TaskId).HasColumnName("TaskId");
        this.Property(t => t.Title).HasColumnName("Title");

    }
这是可能的,如果是这样,一个例子或链接到文档将是伟大的

我找到了一个解决方案:

List<Task> tasks = db.Tasks.SqlQuery("Select * from vw_AllTasks").ToList<Task>();
我找到了一个解决方案:

List<Task> tasks = db.Tasks.SqlQuery("Select * from vw_AllTasks").ToList<Task>();

差不多4年后。。。EF6已经推出那么久了?哇

默认情况下,EF不能很好地处理视图:EDMX Database first和Code first反向工程都对视图做出了一些愚蠢的假设,例如,视图不能具有与实体相同的类型,视图的实体与其他实体没有关系,视图的所有非空列都必须是复合主键,等等

…但是,如果您手动重写EF生成的任何内容,使其认为视图是表,那么它将完全正确地工作导航属性等。但是,这样做有点困难,需要在从数据库更新模型时重新执行

幸运的是,有一个解决方案——如果你不介意把手弄脏一点的话:有一个第三方,开源,Entity Framework model generator T4模板不需要VS扩展:只需在项目中包含3个文件,也可以作为名为ReversePOCO的NuGet软件包提供:免责声明:几个月前,我提供了一些补丁,专门用于支持视图处理

默认情况下,ReversePOCO中的T4模板生成的代码与EF6的code First generator创建的代码类似,但处理视图非常简单:

在配置ReversePOCO设置对象的Database.tt文件中,确保Settings.IncludeViews=true。 在2.37.1版中查找Settings.ViewProcessing回调函数,如310。 取消对现有代码的注释并对其进行修改以满足您的偏好。您需要列出视图中哪些列是主键。 在版本2.37.1的第326行附近查找Settings.AddForeignKeys回调。 取消对现有代码的注释,并对其进行修改以匹配所需的外键关系。这将确保正确创建导航属性,并完全支持复合外键。
差不多4年后。。。EF6已经推出那么久了?哇

默认情况下,EF不能很好地处理视图:EDMX Database first和Code first反向工程都对视图做出了一些愚蠢的假设,例如,视图不能具有与实体相同的类型,视图的实体与其他实体没有关系,视图的所有非空列都必须是复合主键,等等

…但是,如果您手动重写EF生成的任何内容,使其认为视图是表,那么它将完全正确地工作导航属性等。但是,这样做有点困难,需要在从数据库更新模型时重新执行

幸运的是,有一个解决方案——如果你不介意把手弄脏一点的话:有一个第三方,开源,Entity Framework model generator T4模板不需要VS扩展:只需在项目中包含3个文件,也可以作为名为ReversePOCO的NuGet软件包提供:免责声明:几个月前,我提供了一些补丁,专门用于支持视图处理

默认情况下,ReversePOCO中的T4模板生成的代码与EF6的code First generator创建的代码类似,但处理视图非常简单:

在配置ReversePOCO设置对象的Database.tt文件中,确保Settings.IncludeViews=true。 在2.37.1版中查找Settings.ViewProcessing回调函数,如310。 取消对现有代码的注释并对其进行修改以满足您的偏好。您需要列出视图中哪些列是主键。 在版本2.37.1的第326行附近查找Settings.AddForeignKeys回调。 取消对现有代码的注释,并对其进行修改以匹配所需的外键关系。这将确保正确创建导航属性,并完全支持复合外键。