WCF DataService在插入时抛出ConnectionString异常

时间:2013-07-17 13:04:34

标签: c# connection-string wcf-data-services

当我从中获取数据时,我的WCF数据服务运行良好。当我尝试插入新数据时,我得到以下异常:

  

ConnectionString属性尚未初始化

我修改的唯一内容是使用我的部分类来告诉使用连接字符串名称:

public MyExtEntities(string connectionString) : base(connectionString) { ... } : base(connectionString) { ... }

我覆盖CreateDataSource,所以总是有适当的背景:

protected override MyExtEntities CreateDataSource()
{
    MyExtEntities entities = null;
    try
    {
        entities = new MyExtEntities ("name=MyExtEntities");
        ...
        return entities;

您可以相信,配置文件包含该密钥:

  

add name =“MyExtEntities”connectionString =“metadata = res:// * ...

堆栈显示核心系统正在运行,而不是我的方法:

  

System.Data.EntityClient.EntityConnection.Open()
at:   System.Data.Objects.ObjectContext.EnsureConnection()
在:   System.Data.Objects.ObjectContext.SaveChanges(SaveOptions选项)
  
at:System.Data.Entity.Internal.InternalContext.SaveChanges()
at:   System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
在:   System.Data.Entity.DbContext.SaveChanges()
在:   lambda_method(Closure,Object)
在:   System.Data.Services.Providers.DbContextHelper<> C_ DisplayClass4.b _0()   
在:   System.Data.Services.Providers.ObjectContextServiceProvider.SaveContextChanges()   
在:   System.Data.Services.Providers.ObjectContextServiceProvider.SaveChanges()   
在:   System.Data.Services.Providers.EntityFrameworkDataServiceProvider.SaveChanges()   
在:   System.Data.Services.DataService 1.HandleNonBatchRequest(RequestDescription description) <br> at: System.Data.Services.DataService 1.HandleRequest()

我已将此添加到OnStartProcessingRequest

protected override void OnStartProcessingRequest(ProcessRequestArgs args)
{
    if (this.CurrentDataSource == null)
        this.CreateDataSource();
    base.OnStartProcessingRequest(args);
}

抓取工作并使用相同的连接真的很奇怪...... 我该怎么检查?

2 个答案:

答案 0 :(得分:0)

对于INSERTING,我找到了一个替代方法:

public override int SaveChanges()
    {
      if (string.IsNullOrEmpty(this.Database.Connection.ConnectionString))
        this.Database.Connection.ConnectionString = savedConnectionString;
      return base.SaveChanges();
    }

INSERT上的连接字符串为null。我以为我已经完成但是我尝试了更新。 它永远不会命中SaveChanges,例外是一样的。

我检查了发送到我服务的URI: HTTP://*/myservice/myservice.svc/Informations(guid'3091f861-0367-4a0a-9b9d-46002e5c2fc5' ) 它使用GET并尝试获取要覆盖的记录。 它也抛出相同的异常(连接字符串为null)。

使用的 DEFAULT CONTEXT 是什么? EF显然没有使用我获取数据的服务操作使用的连接字符串。

在OnStartProcessingRequest方法中,首先调用CreateDataSource,然后调用base.OnStartProcessingRequest,然后调用异常。 我该怎么办?

答案 1 :(得分:0)

嗯,为了解决无法解释的问题,这是一种方法 对于未知原因,当CreateDataSource方法创建新的DbContext实例时,它并不总是具有连接字符串。为了防止这种情况发生,我创建了一个DbContext实例和DataService类,以确保我有一个合适的实例:

public class InformationDataService : DataService<InformationEntities>
  {
    private InformationEntities context = new InformationEntities("name=InformationEntities");

之后我修改了覆盖的CreateDataSource,以便始终返回最初创建的(并且希望正常工作)DbContext:

protected override InformationEntities CreateDataSource()
    {
      if (context == null)
                return new InformationEntities("name=InformationEntities");
      return context;
    }

经过这些修改后,错误消失了。