同じデータベース(MDFデータベース)を持つ2つのプロジェクトを作成しています。1つ目はマップエディターで、XNA4とWebサービスを使用して接続します。2つ目はゲーム自体で、XNA3.1とエンティティデータモデルを使用してデータベースに接続します。
マップエディタを実行してデータベースにアクセスすると、正しく実行されます。しかし、ゲームを実行してデータベースにアクセスすると、「基になるプロバイダーがOpenで失敗しました」というエラーが表示されます。
Webサービスからの接続はまだ閉じられていないと思います。しかし、どこで接続を閉じるべきかわかりません。
これがWebサービスからの私のコードです:
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 = "DataSource=。\SQLEXPRESS;AttachDbFilename = | DataDirectory | \ 3DMapDatabase.mdf; Integrated Security = True; Connect Timeout = 30; User Instance = True"
ゲームの接続文字列:
"metadata = res:// /MazeDataModel.csdl | res:// /MazeDataModel.ssdl | res://*/MazeDataModel.msl;provider=System.Data.SqlClient; provider connection string =" DataSource=。\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 "/>