gpt4 book ai didi

c# - WCF 项目试图在数据库已经存在时重新创建它

转载 作者:太空狗 更新时间:2023-10-30 01:58:07 25 4
gpt4 key购买 nike

所以我试图在 WCF 项目中利用 EF 和我现有的数据库,以便将一些实体添加到数据库中。

设置:

所以我的解决方案有多个层次。

  • 核心(类库)
  • 数据(类库)
  • 服务(类库)
  • WCFServices(WCF 应用程序)
  • WebUI(MVC 项目)

Entity Framework 6.2.0 安装在我的数据、WCFServices 和 WebUI 项目中。 (下图)

enter image description here

所以我的数据库模型存储在核心项目中,我的数据库迁移存储在数据项目中。我的 Web UI 项目在访问和使用数据库时没有问题。我在 MVC 项目和 WCF 项目中存储了完全相同的连接字符串。

MVC web.config 连接字符串

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-SQDCDashboard.WebUI-20190610100239.mdf;user id = exampleUser; password = ExamplePassword;Integrated Security=False" providerName="System.Data.SqlClient" />

WCF 项目具有以下连接字符串。

WCF web.config 连接字符串

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-SQDCDashboard.WebUI-20190610100239.mdf;user id = exampleUser; password = ExamplePassword;Integrated Security=False" providerName="System.Data.SqlClient" />

如您所见,它们完全匹配。

WCF 服务

public class OrderService : IOrderService
{
public string InsertOrder(OrderDTO order)
{
try
{
using (var context = new DataContext())
{
var productionLine = context.ProductionLines
.Where(x => x.ComputerName == order.ComputerName)
.FirstOrDefault();

if (productionLine == null)
throw new Exception("Production line could not be determined from computer name");

context.Orders.Add(new Core.Models.Order
{
MaterialNumber = order.MaterialNumber,
SerialNumber = order.SerialNumber,
ProductionNumber = order.ProductionNumber,
SalesNumber = order.SalesNumber,
OrderComplete = false,
ProductionLineId = productionLine.Id
});
context.SaveChanges();
return "Success";
}
}
catch (Exception ex)
{
return ex.Message;
}
}
}

错误

所以这就是问题所在。当我运行 WCF 测试客户端来测试我的服务时,它会抛出以下错误:

Cannot create file 'C:\Users\eric_obermuller\Source\Repos\SQDC Dashboard\SQDCDashboard\SQDCDashboard.WCFServices\App_Data\aspnet-SQDCDashboard.WebUI-20190610100239.mdf' because it already exists. Change the file path or the file name, and retry the operation. CREATE DATABASE failed. Some file names listed could not be created. Check related errors.

这让我很困惑,因为数据库已经存在了。为什么要尝试创建一个新的?在单个解决方案中构建多个项目时,我有点初学者。所以可能是我只是不了解 EF 如何在项目之间进行交互?

我注意到我的 WCF 项目和 MVC 项目在各自的 App_Data 文件夹中都有自己的数据库文件。我不得不说我不确定 EF 如何将这些文件与实际的本地数据库结合使用,这一直让我感到困惑,所以我可能在这里遗漏了一些东西(见下文)。

enter image description here

我尝试过的

  1. 最初我使用的是 Windows 身份验证,但尝试切换到 SQL Server 身份验证(这是我稍后将最终使用的身份验证)。
  2. 我尝试删除项目中的迁移文件夹并删除数据库迁移表。我重新启用了迁移,添加了一个空迁移,并更新了数据库。
  3. 我三重检查了我引用的 SQL Server 帐户是否具有对数据库的读/写权限。

最后的评论

同样,我在实际的 MVC web UI 项目中使用数据库时遇到了 0 个问题。我的 MVC 项目确实使用 ninject 将我的服务项目的依赖项注入(inject) Controller ,它还将 dbContext(存储在我的数据项目中)注入(inject)一些通用存储库(也存储在我的数据项目中),这些存储库在我的服务类库中使用项目。

我的 WCF 项目不以任何方式使用 ninject,我直接引用 dbcontext,因为此服务非常简单,不需要所有这些。所以我也可以看到这是可能的问题?

最佳答案

您为数据库迁移设置了哪个 DatabaseInitializer?如果您使用的是“DropCreateDatabaseAlways” ' 初始化程序并为两个并行运行的应用程序使用相同的数据库,这可能会导致问题。虽然您的 MVC 应用程序运行良好,但 WCF 在启动 DBContext 时会失败,因为它会尝试删除并重新创建数据库。更改数据库 initializers适合这种情况的那个。 “DropAndRecreateAlways/ModelChange”不是最佳人选。

关于c# - WCF 项目试图在数据库已经存在时重新创建它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57402061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com