为了账号安全,请及时绑定邮箱和手机立即绑定

如何在代码优先实体框架中使用视图

如何在代码优先实体框架中使用视图

宝慕林4294392 2019-10-17 10:51:42
我如何首先在实体框架代码中使用数据库视图,
查看完整描述

3 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

如果像我一样,您仅对映射来自其他数据库的实体(在本例中为erp)感兴趣,以将其与应用程序特定的实体相关联,那么可以像使用表一样使用视图(在以同样的方式!)。显然,如果您尝试更新该实体,则如果视图不可更新,则会出现异常。该过程与普通(基于表)实体的情况相同:


为视图创建POCO类;例如FooView

在DbContext类中添加DbSet属性

使用FooViewConfiguration文件为视图设置其他名称(在构造函数中使用ToTable(“ Foo”);)或设置特定的属性


public class FooViewConfiguration : EntityTypeConfiguration<FooView>      

{

    public FooViewConfiguration()

    {

        this.HasKey(t => t.Id);

        this.ToTable("myView");

    }

}

将FooViewConfiguration文件添加到modelBuilder中,例如,检查Context的OnModelCreating方法:


protected override void OnModelCreating(DbModelBuilder modelBuilder)

{

    modelBuilder.Configurations.Add(new FooViewConfiguration ());

}


查看完整回答
反对 回复 2019-10-17
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

这可能是一个更新,但是要首先使用带有EF Code的视图,只需将[Table(“ NameOfView”)]添加到类的顶部,所有这些都应该正常工作,而不必经历其他所有人正在经历的所有麻烦。同样,您将不得不将其中一列报告为[key]列。这是我下面的实现示例代码。


using System.ComponentModel.DataAnnotations;

using System.ComponentModel.DataAnnotations.Schema;


namespace SomeProject.Data

{

    [Table("SomeView")]

    public class SomeView

    {

        [Key]

        public int NameID { get; set; }

        public string Name { get; set; }

    }

}

这是上下文的样子


using System.Data.Entity;


namespace SomeProject.Data

{

    public class DatabaseContext : DbContext

    {

        public DbSet<SomeView> SomeViews { get; set; }

    }

}


查看完整回答
反对 回复 2019-10-17
?
大话西游666

TA贡献1817条经验 获得超14个赞

如果您想要的只是一堆非规范化的对象,那么您可能只是在类中创建了一个公共的get-only IQueryable<TDenormolized>属性DbContext

在中,get您将返回Linq结果,以将反标准化的值投影到反标准化的对象中。这可能比编写DB View更好,因为您正在编程,而不仅限于使用select语句。而且它是编译时类型安全的。

请注意,不要触发枚举之类的ToList()调用,因为它们会打断延迟的查询,您最终可能会从数据库中获得一百万条记录,并在应用程序服务器上对其进行过滤。

我不知道这是否是正确的方法,但我尝试过并且对我有用。


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 545 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信