我正在创建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;
答案 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