Вот что у меня сработало.Я создал тестовую таблицу следующим образом:
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[MyTable]') AND type in (N'U'))
DROP TABLE [dbo].[MyTable]
GO
CREATE TABLE [dbo].[MyTable](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Data1] [varchar](50) NOT NULL,
[Data2] [varchar](50) NOT NULL,
CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED
(
[Id] 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 INTO [dbo].[MyTable] (Data1,Data2) VALUES ('Row 1 - Data 1', 'Row1 - Data 2')
INSERT INTO [dbo].[MyTable] (Data1,Data2) VALUES ('Row 2 - Data 1', 'Row2 - Data 2')
GO
В VS я импортировал эту таблицу с помощью мастера в модель Entity.Затем я написал следующий код:
TestEntities ctx = new TestEntities();
var data = from d in ctx.MyTables select new { d.Id, d.Data1 };
var data2 = data.AsEnumerable().Select(x => new MyTable(){Id = x.Id, Data1 = x.Data1 });
var data3 = data2.ToList();
foreach (var item in data3)
{
ctx.MyTables.Attach(item);
}
data3[0].Data1 = "Hello";
ctx.SaveChanges();
После выполнения этого кода я просмотрел базу данных и проверил, что значение изменилось на «Hello».