0

同じデータベース(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 "/>

4

4 に答える 4

0

簡単に確認するには、使用後に次の行を追加してみてください。

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

        OR

        context.Database.Connection.Open(); 

        // your code here
于 2012-05-12T07:45:20.720 に答える
0

最後に、いくつかの記事を読んだ後、問題を解決する方法を見つけました。マップエディタを閉じた後、Webサービスからの接続が自動的に閉じられません。そのため、ゲームからデータベースにアクセスできません。両方のアプリケーションから接続文字列を変更する必要があります。ユーザーインスタンスをFalseに設定します。ゲームはこの方法でデータベースにアクセスできます。

于 2012-05-19T11:22:35.623 に答える
0

次の投稿を確認してください http://th2tran.blogspot.ae/2009/06/underlying-provider-failed-on-open.html

また、そのアプリケーションのアプリケーションプールで32ビットアプリケーションを有効にしてください。

これは解決する可能性があります。

于 2014-03-05T12:07:41.067 に答える
-1

コンテキストに関連付けられているオブジェクト(マップ)を返そうとしています。このオブジェクトには、クライアントに返すことができないコンテキスト情報が含まれています。

クライアントに公開する独自のDataContract(必要なプロパティを持つタイプ)を作成する必要があります。

または、ここで説明するようにPOCO実装を使用できます

于 2012-05-12T06:39:12.463 に答える