2016-10-01 79 views
1

我在我的SQL数据库中有一个视图。我想要的只是从该视图中检索数据。使用代码优先从数据库视图中检索数据时出错

我已经添加了POCO类。

namespace WFPersistence.DataModel 
{ 
    public class Instance 
    { 
     public Guid InstanceId { get; set; } 
     public DateTime? PendingTimer { get; set; } 
     public DateTime? CreationTime { get; set; } 
     public DateTime? LastUpdatedTime { get; set; } 
     public int? ServiceDeploymentId { get; set; } 
     public string SuspensionExceptionName { get; set; } 
     public string SuspensionReason { get; set; } 
     public string ActiveBookmarks { get; set; } 
     public string CurrentMachine { get; set; } 
     public string LastMachine { get; set; } 
     public string ExecutionStatus { get; set; } 
     public bool? IsInitialized { get; set; } 
     public bool? IsSuspended { get; set; } 
     public bool? IsCompleted { get; set; } 
     public byte? EncodingOption { get; set; } 
     public byte[] ReadWritePrimitiveDataProperties { get; set; } 
     public byte[] WriteOnlyPrimitiveDataProperties { get; set; } 
     public byte[] ReadWriteComplexDataProperties { get; set; } 
     public byte[] WriteOnlyComplexDataProperties { get; set; } 
     public string IdentityName { get; set; } 
     public string IdentityPackage { get; set; } 
     public long? Build { get; set; } 
     public long? Major { get; set; } 
     public long? Minor { get; set; } 
     public long? Revision { get; set; } 
    } 

    public class Instances : Collection<Instance> 
    { 
    } 
} 

这就是我试图用视图来映射。

public class WFPersistenceStore : DbContext 
{ 
    public WFPersistenceStore() : base("WFPersist") 
    { 
    } 

    public DbSet<Instance> PersistedInstances { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Instance>().ToTable("System.Activities.DurableInstancing.Instances"); 
    } 
} 

这是我如何与视图连接

using (var PersistStore = new WFPersistenceStore()) 
{ 
    var result = from t in PersistStore.PersistedInstances 
       select t; 
    //// 
    /// 
} 

我收到此错误:

An unhandled exception of type 'System.ArgumentException' occurred in RentalHost.exe

Additional information: The database name 'System.Activities.DurableInstancing.Instances' is invalid. Database names must be of the form [.].

+0

你的表名需要采用[schema]。[object_name]的形式 - 尝试重命名它。 –

+0

我尝试了这种方式,但它抱怨模型不匹配,需要更新。因为在这种情况下,它将我的POCO类与实际的表格方案相匹配,而不是与视图方案匹配。希望你明白我的意思。 – immirza

回答

0

我已经解决我的问题,只是把下面一行在我的上下文类的构造函数中(即WFPersistenceStore)。

Database.SetInitializer<WFPersistenceStore>(null); 

这在官方文档中没有提及,如果我没有错的话。

上述行仅适用于EF6版本,但不适用于早期版本的EF。

0

你的方法应该是这样

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Entity<Instance>().ToTable("Instances"); 
     } 
+0

即使这样,它也会产生相同的错误“自从创建数据库以来,支持'WFPersistenceStore'上下文的模型已经发生了变化。考虑使用Code First Migrations来更新数据库(http://go.microsoft.com/fwlink/?LinkId= 238269)。” – immirza

相关问题