我有一个代码第一个EF 6模型。我正在尝试使用RemoveRange()删除指定范围的数据,然后在实体上使用SaveChanges()。
customerContext.RosterSummaryData_Subject_Local.RemoveRange(subjLocal); // subjLocal is not important to the question
customerContext.SaveChanges();
当我跳过SaveChanges方法时收到此消息:
所以我查看内部异常并看到消息
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 :(得分:0)
基于错误EF无法找到存储过程。您能否确认存储过程确实是在数据库中创建的?可能是您没有数据库权限来创建存储过程。
您还使用默认迁移选项CreateDatabaseIfNotExists。如果数据库已存在,则不会创建对象。请考虑使用DropCreateDatabaseIfModelChanges或DropCreateDatabaseAlways。这将在每次数据库更改时删除数据库,因此您必须编写迁移脚本以在开发环境中重新填充数据。请参阅下面的代码示例
public CustomerContext(string connStr) : base(connStr)
{
Database.SetInitializer<CustomerContext>(new DropCreateDatabaseIfModelChanges<CustomerContext>());
}
答案 1 :(得分:0)
如果数据库中存在存储过程,请确保过程名称包含模式名称“dbo”。例如。 存在过程时有时也会出现此问题DbUpdate也因为无法找到而失败,为此请更改存储过程名称并重试。我希望它能奏效。 感谢。