Dan*_*sco 85
如果像我一样,您只对来自其他数据库的映射实体(在我的情况下是一个erp)感兴趣,将它们与特定于您的应用程序的实体相关联,那么您可以在使用表时使用视图(将视图映射到一样的方法!).显然,如果您尝试更新这些实体,如果视图不可更新,您将收到异常.该过程与普通(基于表)实体的情况相同:
使用FooViewConfiguration文件为视图设置不同的名称(使用ToTable("Foo");在构造函数中)或设置特定属性
public class FooViewConfiguration : EntityTypeConfiguration<FooView>      
{
    public FooViewConfiguration()
    {
        this.HasKey(t => t.Id);
        this.ToTable("myView");
    }
}
将FooViewConfiguration文件添加到modelBuilder,例如,使上下文的OnModelCreating方法失效:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new FooViewConfiguration ());
}
Al *_*azi 15
这可能是一个更新,但要使用EF代码的视图首先只需将[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; }
    }
}
小智 10
如果你想要的只是一堆非规范化的对象,那么你可能只是IQueryable<TDenormolized>在你的DbContext类中创建了一个公共的get-only 属性.
在get您返回Linq结果时,将去正规化的值投影到您的非规范化对象中.这可能比编写DB View更好,因为您正在编程,您不仅仅使用select语句.它也是编译时类型安全的.
请注意不要触发ToList()调用之类的枚举,否则会破坏延迟查询,最终可能会从数据库中获取一百万条记录并在应用程序服务器上过滤它们.
我不知道这是不是正确的方法,但我尝试过,它对我有用.
| 归档时间: | 
 | 
| 查看次数: | 67471 次 | 
| 最近记录: |