Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架6.1检查是否未连接,然后连接崩溃_C#_Entity Framework 6.1 - Fatal编程技术网

C# 实体框架6.1检查是否未连接,然后连接崩溃

C# 实体框架6.1检查是否未连接,然后连接崩溃,c#,entity-framework-6.1,C#,Entity Framework 6.1,我正在尝试做一些事情,这里有一个“演示”,非常简单的例子。(这个演示没有任何意义,但它给出了我尝试做什么的一般概念) 我把我试过的东西注释掉了 有没有一种方法可以在不创建新上下文的情况下做到这一点 这是sql server上的第一个数据库 c#代码 SQL脚本 USE [testing] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[LookupTable]( [LookupId] [int

我正在尝试做一些事情,这里有一个“演示”,非常简单的例子。(这个演示没有任何意义,但它给出了我尝试做什么的一般概念)

我把我试过的东西注释掉了

有没有一种方法可以在不创建新上下文的情况下做到这一点

这是sql server上的第一个数据库

c#代码

SQL脚本

USE [testing]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[LookupTable](
    [LookupId] [int] NOT NULL,
 CONSTRAINT [PK_LookupTable] PRIMARY KEY CLUSTERED 
(
    [LookupId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[MainTable](
    [MainId] [int] NOT NULL,
 CONSTRAINT [PK_MainTable] PRIMARY KEY CLUSTERED 
(
    [MainId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[MainTable_LookupTable](
    [MainId] [int] NOT NULL,
    [LookupId] [int] NOT NULL,
 CONSTRAINT [PK_MainTable_LookupTable] PRIMARY KEY CLUSTERED 
(
    [MainId] ASC,
    [LookupId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT [dbo].[LookupTable] ([LookupId]) VALUES (1)
GO
INSERT [dbo].[MainTable] ([MainId]) VALUES (10)
GO
INSERT [dbo].[MainTable_LookupTable] ([MainId], [LookupId]) VALUES (10, 1)
GO
ALTER TABLE [dbo].[MainTable_LookupTable]  WITH CHECK ADD  CONSTRAINT [FK_MainTable_LookupTable_LookupTable] FOREIGN KEY([LookupId])
REFERENCES [dbo].[LookupTable] ([LookupId])
GO
ALTER TABLE [dbo].[MainTable_LookupTable] CHECK CONSTRAINT [FK_MainTable_LookupTable_LookupTable]
GO
ALTER TABLE [dbo].[MainTable_LookupTable]  WITH CHECK ADD  CONSTRAINT [FK_MainTable_LookupTable_MainTable] FOREIGN KEY([MainId])
REFERENCES [dbo].[MainTable] ([MainId])
GO
ALTER TABLE [dbo].[MainTable_LookupTable] CHECK CONSTRAINT [FK_MainTable_LookupTable_MainTable]
GO
在我的例子中,解决方案是这个代码

for (var i = 1; i < 3; ++i)
{
    lookup = db.LookupTables.Local.FirstOrDefault(x => x.LookupId == i);

    if (lookup == null)
    {
        lookup = new edmx.LookupTable() { LookupId = i };
        db.LookupTables.Attach(lookup);
    }

    main.LookupTables.Add(lookup);
}
for(变量i=1;i<3;++i)
{
lookup=db.LookupTables.Local.FirstOrDefault(x=>x.LookupId==i);
如果(查找==null)
{
lookup=new edmx.LookupTable(){LookupId=i};
db.LookupTables.Attach(查找);
}
main.LookupTables.Add(查找);
}
查找实例(id为1)仍然连接到EF,您正在调用的Remove只是删除main(10)和lookup(1)之间的链接

再次创建查找实例时,它在.NET中是另一个实例,但对于数据库/EF,它实际上是一个重复实例


您应该重新使用上一个查找实例,或者使用DbSet的属性再次查找它。

谢谢,我使用您的建议用“解决方案”更新了我的问题,效果很好
for (var i = 1; i < 3; ++i)
{
    lookup = db.LookupTables.Local.FirstOrDefault(x => x.LookupId == i);

    if (lookup == null)
    {
        lookup = new edmx.LookupTable() { LookupId = i };
        db.LookupTables.Attach(lookup);
    }

    main.LookupTables.Add(lookup);
}