gpt4 book ai didi

c# - DbContext 在不同类中的行为不同

转载 作者:行者123 更新时间:2023-12-03 01:57:41 25 4
gpt4 key购买 nike

我有一个本地 ASP.NET MVC 3 Windows Azure 项目,我在其中为我的模拟器使用 MSSQL Express 的本地实例。

在我的web.config中,我有以下连接字符串:

<add name="ExampleDb" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=ExampleDb;User Instance=true;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />

出于调试目的,我的 WebRole.cs 文件中有以下内容:

public override bool OnStart() 
{
ExampleDb context = new ExampleDb();
context.ExampleItemEntries.Add(new ExampleItem() { ExampleItemId = 1, Att1 = "1", Att2 = "2" });
context.SaveChanges();
return base.OnStart();
}

当我执行此操作时,我实际上可以看到代码优先生成的数据库中的内容(使用 Entity Framework )。数据库:ExampleDb,表:ExampleItem。

但是,在 ExampleController 中执行完全相同的操作不会更新数据库。相反,这些数据会转移到其他地方(我不知道在哪里)。当我通过浏览器访问我的 Controller 时,我可以上传数据并查看它,但它没有存储在我的ExampleDb数据库中,只有从WebRole.cs发送的数据在数据库中。

有什么想法导致这种行为吗?

ExampleDb.cs 看起来像这样:

public class ExampleDb : DbContext
{
public ExampleDb() : base("ExampleDb") { }
public DbSet<ExampleItem> ExampleItemEntries { get; set; }
}

最佳答案

您的连接字符串包含“User Instance=True”。这意味着 SQLEXPRESS 使用用户实例来存储您的数据。这是一个完全不同的 SQL Server 实例,包含一组新的数据库。

我假设 WebRole.cs 中的代码与 ExampleController 中的代码在不同的用户帐户中运行。当ExampleController在非管理员用户帐户下运行时,将使用用户实例...

因此,当您从连接字符串中删除“User Instance=True”并为 SQLEXPRESS 数据库实例分配适当的访问权限时,问题就可以解决。

关于c# - DbContext 在不同类中的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10934285/

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