0

「Web ストア」mvc アプリで、アイテムをデータベースに追加したいと考えています。Items テーブルには CreatedBy フィールドがあり、これは User テーブルの UserId フィールドからの外部キーです。データベースを App_Data フォルダーに入れる前は、すべてが機能していました。新しいアイテムを作成しようとすると、SqlException が発生します。

INSERT ステートメントが FOREIGN KEY 制約 "FK_Item_contains_User" と競合しました。データベース「C:\USERS\ALEKSEY\REPOS\2\WEBSTORE\WEBSTORE\APP_DATA\WEBSTORE.MDF」、テーブル「dbo.Users」、列「UserId」で競合が発生しました。

ItemRepository クラスの Create メソッドは次のとおりです。

public Item CreateItem(int productId, Guid userId)
    {
        var item = new Item
            {
                ProductId = productId,
                CreatedBy = userId,
            };
        _dataContext.Items.InsertOnSubmit(item);
        _dataContext.SubmitChanges(); // in this line the exception occures !
        return item;
    }

コントローラー メソッド Create は次のとおりです。

    [HttpGet]
    public ViewResult Create()
    {
        var p = _productRepository.CreateProduct("", "", 0, "", "", "");
        var userId = (Guid)Membership.GetUser().ProviderUserKey;
        var item = _itemsRepository.CreateItem(p.ProductId, userId);

        // some code
        return View(model);
    }

その上、Linq to Sql モデルのドラッグ アンド ドロップ アプローチを使用します。
変更された web.config 接続文字列部分は次のとおりです。

<connectionStrings>
<add name="WebStoreConnectionString" connectionString="Data Source=(LocalDB)\v11.0;
     AttachDbFilename=|DataDirectory|\WebStore.mdf;Integrated Security=True;Connect Timeout=30" 
    providerName="System.Data.SqlClient" />

<add name="DefaultConnection" connectionString="Data Source=|DataDirectory|\aspnet.sdf" 
     providerName="System.Data.SqlServerCe.4.0" />

私が言ったように、データベースを App_Data ファイルに移動する前にすべてが機能していました。また、Items テーブルと Users テーブルの間の依存関係を削除しようとしましたが、まったく同じ例外です。

どんな助けでも適切です。前もって感謝します!

編集:

さて、Items テーブルと Users テーブルの間の依存関係を実際に壊したので、例外は発生しません。しかし!各製品の作成者をどうにかして知る必要があるため、依存関係を断ち切ることはできません。また、CreatedBy フィールドを初期化するすべてのコードを削除しようとしました。

何か案は??

編集 (パート 2):

以下の 2 番目のコメントは素晴らしいアドバイスです。作成されたすべてのユーザーが現在 aspnet.sdf データベースに保存されていることがわかりました!!!
しかし、接続文字列「DeafaultConnection」を削除すると、次のようになります。

<add name="DefaultConnection" connectionString="Data Source=|DataDirectory|\aspnet.sdf"
  providerName="System.Data.SqlServerCe.4.0" />  

ConfigurationErrorsException が発生します。

"The connection name 'DefaultConnection' was not found in the applications 
configuration or the connection string is empty." 

次の行で:

 var userId = (Guid)Membership.GetUser().ProviderUserKey;
4

1 に答える 1

0

わかりました、問題は構成にあると推測しました。接続文字列の各プロバイダーには (何らかの理由で) "DefaultConnection" がありました。「WebStoreConnectionString」に変更しました。そして今、すべてが機能します!

ps @w0lf に感謝します。彼は考えを正しい方向に推し進めました)

于 2013-01-09T20:24:28.960 に答える