Linq to sql 在C中使用LINQ to SQL修改数据库会使数据库在SQL Management Studio中无法访问
使用SQLServer2008Express,我在SQLServerManagementStudio中附加了Northwind数据库,一切正常 然后,我断开服务器连接,关闭SQL server Management Studio,并使用以下LINQ到SQL C代码修改Northwind数据库:Linq to sql 在C中使用LINQ to SQL修改数据库会使数据库在SQL Management Studio中无法访问,linq-to-sql,ssms,Linq To Sql,Ssms,使用SQLServer2008Express,我在SQLServerManagementStudio中附加了Northwind数据库,一切正常 然后,我断开服务器连接,关闭SQL server Management Studio,并使用以下LINQ到SQL C代码修改Northwind数据库: using System.Linq; using System.Data.Linq; using System.Data.Linq.Mapping; namespace LinqConsoleApp {
using System.Linq;
using System.Data.Linq;
using System.Data.Linq.Mapping;
namespace LinqConsoleApp
{
class Program
{
static void Main(string[] args)
{
Northwnd db = new Northwnd(@"C:\Program Files (x86)\Microsoft SQL
Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\northwnd.mdf");
Customer testCust = new Customer();
testCust.CompanyName = "Dummy"; testCust.CustomerID = "DE1";
db.Customers.InsertOnSubmit(testCust);
db.SubmitChanges();
db.Dispose();
}
}
}
它执行时没有错误。当我重新打开Management Studio并选择Northwind数据库时,会收到“数据库不可访问”错误消息,并且无法查看Northwind的任何表
知道为什么运行此LINQ代码会阻止ManagementStudio随后访问数据库吗
谢谢
更新:
Northwnd类是从sqlmetal.exe自动生成的,因此在调用Northwnd构造函数时,它会执行以下操作以连接到MDF文件:
public Northwnd(string connection) : (connection, mappingSource)
{
OnCreated();
}
如果OnCreated不执行任何操作,则基类为System.Data.Linq.DataContext,“mappingSource”为:
private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
你能告诉我们你在北方班到底做什么吗 至少我觉得这很奇怪——如果不是完全危险的话,您似乎将Northwind连接到SQL Server Express实例,以便您可以在SQL Server Management Studio中访问它,同时,您的Northwnd类似乎正在访问直接连接到SQL Server Express的MDF文件 如果可以,我会尝试使用普通连接字符串:
server=.\SQLExpress;Database=Northwind;Integrated Security=SSPI
当数据库连接到SQL Server Express实例时……谢谢marc\s。我使用Microsoft的sqlmetal.exe生成器直接从数据库生成Northwnd类。这是数千行,但我会更新的问题,它做什么连接的要点。特别感谢你指出了危险的行为。我认为关闭SQLServerManagementStudio会断开Northwind与我的SQLServerExpress实例的连接,当然不会断开。如果我在直接用我的类访问MDF文件之前确保分离Northwind,那么它的表现似乎很好。