在Asp.Net MVC 3应用程序中创建新项目时出现SqlException

时间:2013-01-09 18:24:52

标签: asp.net asp.net-mvc database asp.net-mvc-3 web-config

在我的“网上商店”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模型拖动'drop方法 这是更改的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部分):

下面的第二条评论提供了很好的建议!我发现创建的所有用户现在都存储在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;

1 个答案:

答案 0 :(得分:0)

好的,正如我猜测问题出在配置中。连接字符串中的每个提供程序(由于某种原因)都具有“DefaultConnection”。我把它改成了“WebStoreConnectionString”。现在一切正常!

P.S。谢谢@ w0lf,他把想法推向正确的方向)