Странное поведение в EF (возможная ошибка) - PullRequest
2 голосов
/ 17 февраля 2012

Я думаю, что, возможно, нашел ошибку в Entity Framework.

Я использую Database First с MVC3.

В моей базе данных есть следующая таблица:

CREATE TABLE [dbo].[InstructionStep](
    [instructionID] [uniqueidentifier] NOT NULL,
    [step] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
    [description] [nvarchar](max) NULL,
    [recurrence] [numeric](18, 0) NULL,
    [parameters] [nvarchar](50) NULL,
    [secuence] [numeric](18, 0) NULL,
    [time] [nvarchar](50) NULL,
 CONSTRAINT [PK_InstructionStep] PRIMARY KEY CLUSTERED 
(
    [instructionID] ASC,
    [step] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY

Я использую linq to EF для сохранения / редактирования информации в этой таблице.Дело в том, что ... столбец "время" НИКОГДА не получает значение.Я трижды проверил, и модель имеет значение для свойства time объекта, но когда я передаю его в EF, оно никогда не попадает в базу данных.Это код, который я использую для создания новой записи:

            using (Models.SAIMBehrEntities db = new Models.SAIMBehrEntities())
            {
                if (step.description != null)
                    step.description = step.description.ToUpper();
                if (step.parameters != null)
                    step.parameters = step.parameters.ToLower();

                db.InstructionSteps.AddObject(step);
                db.SaveChanges();
            }

Это код, который я использую для редактирования записи:

            Models.InstructionStep s = db.InstructionSteps.Where(x => x.instructionID == stepM.instructionID && x.step == stepM.step).FirstOrDefault();
            if (s != null)
            {
                s.parameters = stepM.parameters;
                s.description = stepM.description;
                s.recurrence = stepM.recurrence;
                s.secuence = stepM.secuence;
                s.time = stepM.time;                    
                db.SaveChanges();
            }

Все остальное сохраняется, кроме «времени»столбецТеперь я запустил sql profiler.Это запрос, сгенерированный методом create:

exec sp_executesql N'insert [dbo].[InstructionStep]([instructionID], [description], [recurrence], [parameters], [secuence])
values (@0, @1, @2, @3, @4)
select [step], [time]
from [dbo].[InstructionStep]
where @@ROWCOUNT > 0 and [instructionID] = @0 and [step] = scope_identity()',N'@0 uniqueidentifier,@1 nvarchar(max) ,@2 decimal(18,0),@3 nvarchar(50),@4 decimal(18,0)',@0='9013B4B0-28FB-4C52-912D-3598A8E13880',@1=N'DEMO DESCRIPTION',@2=1,@3=N'none',@4=1

И это запрос, сгенерированный методом обновления:

exec sp_executesql N'update [dbo].[InstructionStep]
set [description] = @0, [recurrence] = @1, [parameters] = @2, [secuence] = @3
where (([instructionID] = @4) and ([step] = @5))
select [time]
from [dbo].[InstructionStep]
where @@ROWCOUNT > 0 and [instructionID] = @4 and [step] = @5',N'@0 nvarchar(max) ,@1 decimal(18,0),@2 nvarchar(50),@3 decimal(18,2),@4 uniqueidentifier,@5 decimal(18,0)',@0=N'DEMO DESCRIPTION',@1=1,@2=N'none',@3=1.00,@4='9013B4B0-28FB-4C52-912D-3598A8E13880',@5=1386

Итак ... да.Столбец «время» выбирается после обновления / вставки.Зачем?превосходит меня ...

Я пытался изменить имя столбца на "timestep" и работал правильно.

Это нормальное поведение?я просто глупый или это ошибка?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...