系统数据实体。底层提供程序在Open上失败

时间:2012-05-12 06:06:29

标签: c# web-services ado.net-entity-data-model

我正在创建2个具有相同数据库的项目(它是MDF数据库)。第一个是地图编辑器,我使用XNA 4和Web服务连接到它。第二个是游戏本身,使用XNA 3.1和实体数据模型连接数据库。

当我运行地图编辑器并访问数据库时,它运行正常。但是当我运行游戏并访问数据库时,它显示错误“底层提供程序在打开时失败”

我认为来自网络服务的连接尚未关闭。但我不知道应该在哪里关闭连接。

以下是来自网络服务的代码:

public Map AddNewMap(string username, string mapName, int sizeX, int sizeY)
    {
        using (BaseModelDataContext context = new BaseModelDataContext())
        {
            Map newMap = new Map()
            {
                Username = username,
                Name = mapName,
                SizeX = sizeX,
                SizeY = sizeY,
                Upload_Date = DateTime.Now,
                Status = 0
            };

            context.Maps.InsertOnSubmit(newMap);
            context.SubmitChanges(System.Data.Linq.ConflictMode.FailOnFirstConflict);
            context.Dispose();
            return newMap;
        }
    }

编辑:

这是实体数据模型代码:

using (MazeEntities ent = new MazeEntities())
        {
            ent.Connection.Open();
            return (from map in ent.Map
                    select map).ToList<Map>();
        }

如果我以前没有使用过Web服务,那么此代码可以正常运行。如果我首先使用Web服务,它会在ent.Connection.Open();

中显示错误

这是内部异常:

  

无法打开用户默认数据库。登录失败。\ r \ n登录用户'erkape-PC \ erkape'失败。

Web服务的连接字符串:

  

connectionString =“Data Source =。\ SQLEXPRESS; AttachDbFilename = | DataDirectory | \ 3DMapDatabase.mdf; Integrated Security = True; Connect Timeout = 30; User Instance = True”

游戏的连接字符串:

  

“元数据= RES:// /MazeDataModel.csdl|res:// /MazeDataModel.ssdl|res://*/MazeDataModel.msl;provider=System.Data.SqlClient;provider connection string =“Data Source =。\ SQLEXPRESS; AttachDbFilename = D:\ eRKaPe \ DropBox \ TA \ Program \ 3D_Map_Editor \ 3DMapEditorServices \ App_Data \ 3DMapDatabase.mdf; Integrated Security = True; Connect Timeout = 30; User Instance = True; MultipleActiveResultSets = True“”providerName =“System.Data.EntityClient”/&gt;

4 个答案:

答案 0 :(得分:0)

要快速检查,您可以尝试在使用后添加以下行:

    using (BaseModelDataContext context = new BaseModelDataContext())
    {
        context.Connection.Open();

        OR

        context.Database.Connection.Open(); 

        // your code here

答案 1 :(得分:0)

最后,我在阅读了一些文章后找到了解决问题的方法。 关闭地图编辑器后,Web服务的连接不会自动关闭。这就是为什么我无法从游戏中访问我的数据库。 我必须从两个应用程序更改连接字符串,我将用户实例设置为False。游戏可以通过这种方式访问​​数据库。

答案 2 :(得分:0)

请查看以下帖子 http://th2tran.blogspot.ae/2009/06/underlying-provider-failed-on-open.html

另请在该应用程序的APplication Pool中启用32位应用程序。

这可能会解决。

答案 3 :(得分:-1)

您正在尝试返回与Context关联的对象(Map)。此对象具有无法返回给客户端的上下文信息。

您需要创建自己的DataContract(具有必要属性的类型),以便向客户端公开。

或者您可以使用POCO实施As described here