2014-11-17 39 views
0

我有一個代碼第一個EF 6模型。我試圖用RemoveRange()去除指定範圍的數據,然後在實體上使用SaveChanges()。c# - 實體框架6錯誤「無法找到存儲過程'dbo.RosterSummaryData_Subject_Local_Delete'。」

customerContext.RosterSummaryData_Subject_Local.RemoveRange(subjLocal); // subjLocal is not important to the question 
customerContext.SaveChanges(); 

我得到這個消息時,我跨過SaveChanges方法: enter image description here

所以我查看內部異常,並看到消息

Could not find stored procedure 'dbo.RosterSummaryData_Subject_Local_Delete'. 

我不知道怎麼說都雖然當我使用onModelCreating方法在我的基本實體中創建所有存儲過程時:

public partial class CustomerContext : DbContext 
{ 
    public CustomerContext() 
     : base("name=CustomerContext") 
    { 
    } 

    public CustomerContext(string connStr) : base(connStr) 
    { 

    } 

    public virtual DbSet<RosterSummaryData_Cluster_Local> RosterSummaryData_Cluster_Local { get; set; } 
    public virtual DbSet<RosterSummaryData_Subject_Local> RosterSummaryData_Subject_Local { get; set; } 
    public virtual DbSet<RosterSummaryData_Cluster_Local_Bands> RosterSummaryData_Cluster_Local_Bands { get; set; } 
    public virtual DbSet<RosterSummaryData_Subject_Local_Bands> RosterSummaryData_Subject_Local_Bands { get; set; } 
    public virtual DbSet<RosterSummaryData_Cluster_Local_Averages> RosterSummaryData_Cluster_Local_Averages { get; set; } 
    public virtual DbSet<RosterSummaryData_Subject_Local_Averages> RosterSummaryData_Subject_Local_Averages { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<RosterSummaryData_Cluster_Local>().MapToStoredProcedures(); 
     modelBuilder.Entity<RosterSummaryData_Subject_Local>().MapToStoredProcedures(); 
     modelBuilder.Entity<RosterSummaryData_Cluster_Local_Bands>().MapToStoredProcedures(); 
     modelBuilder.Entity<RosterSummaryData_Subject_Local_Bands>().MapToStoredProcedures(); 
     modelBuilder.Entity<RosterSummaryData_Cluster_Local_Averages>().MapToStoredProcedures(); 
     modelBuilder.Entity<RosterSummaryData_Subject_Local_Averages>().MapToStoredProcedures(); 
    } 
} 

這裏是一個實例的基本上下文代碼:

CustomerContext customerContext = new CustomerContext(statsInfo.CustomerDCS); 
//statsInfo.CustomerDCS is just the custom connection string for my entity 

有沒有人有什麼,我做錯了任何想法或有這個問題的經驗,因爲我看不出有什麼問題,不能上找不到任何答案互聯網......

編輯:存儲過程肯定是沒有創建,但我沒有看到任何錯誤的代碼,我有適當的權限。

回答

0

根據錯誤EF無法找到存儲過程。你能確認存儲過程確實是在你的數據庫中創建的嗎?這可能是因爲您沒有數據庫權限來創建存儲過程。

此外,您正在使用默認遷移選項CreateDatabaseIfNotExists。如果數據庫已經存在,它不會創建你的對象。考慮使用DropCreateDatabaseIfModelChanges或DropCreateDatabaseAlways。這會在每次數據庫更改時丟棄數據庫,因此您必須編寫一個遷移腳本來重新填充開發環境中的數據。請參考下面

public CustomerContext(string connStr) : base(connStr) 
{ 
    Database.SetInitializer<CustomerContext>(new DropCreateDatabaseIfModelChanges<CustomerContext>()); 
} 
+0

那麼它絕對不是在數據庫中創建的,但我100%確定我有適當的權限。 – frontin

+0

您使用哪種EF遷移策略? EF可能沒有檢測到你的模型有任何變化,也沒有創建存儲的特效。 – RedJandal

+0

EF遷移策略意味着什麼?我所知道的是,它是一個代碼優先模型,我使用自定義連接字符串構造函數連接到數據庫,並且應該創建存儲過程的所有modelBuilder代碼位於問題的代碼中。 – frontin

0

的代碼示例請您確保如果存儲過程出現在你的數據庫,然後檢查程序名稱中包含架構名稱「DBO」。例如。 此問題有時也會在存在過程中發生,因爲DbUpdate無法找到,因此請更改存儲過程名稱,然後重試。我希望它會起作用。 謝謝。

+0

存儲過程沒有被創建,但我不明白爲什麼,因爲我的代碼沒有問題,我擁有適當的權限。有任何想法嗎? – frontin

+0

RosterSummaryData_Subject_Local_Delete是否認爲名稱匹配? –

+0

我不明白你的問題是什麼? – frontin