EF все время говорит мне, что нет функции InsertFunction для сущности из БД с установленным Identity? - PullRequest
0 голосов
/ 11 ноября 2011

Приложение использует Entity Framework 4.1 с первым подходом к базе данных.

У меня в базе данных есть простая таблица для регистрации:

CREATE TABLE [dbo].[LogEntrys](
    [LogEntryID] [bigint] IDENTITY(1,1) NOT NULL,
    [Timestamp] [datetime] NULL,
    [Message] [varchar](5000) NULL,
    [IP] [varchar](50) NULL,
    [UserName] [varchar](256) NULL,
    [Controller] [varchar](50) NULL,
    [Action] [varchar](50) NULL
)

В модели он переводится нормально в EntitySet 'LogEntrys' и Entity LogEntry. Проблема в том, что когда я пытаюсь вставить что-то в таблицу из приложения, я получаю следующую ошибку:

Невозможно обновить EntitySet 'LogEntrys', так как он имеет DefiningQuery и в элементе нет элемента для поддержки текущей операции.

Я видел похожие посты на SO, и я пытался решить эту проблему, отредактировав XML-файл edmx, как описано в этом совете: Подсказка блога MSDN 34 , я удалил запрос Defining. Ключ уже настроен так, как и должно быть.

но тогда я получаю следующую ошибку:

"Неверное имя объекта 'AMSModelStoreContainer.LogEntrys'."

Я не уверен, в чем проблема и / или что я делаю не так?

есть идеи?

Спасибо.

1 Ответ

1 голос
/ 11 ноября 2011

Проблема в том, что поле no установлено в качестве первичного ключа, создайте свою таблицу следующим образом:

CREATE TABLE [dbo].[LogEntrys](
    [LogEntryID] [bigint] IDENTITY(1,1) NOT NULL,
    [Timestamp] [datetime] NULL,
    [Message] [varchar](5000) NULL,
    [IP] [varchar](50) NULL,
    [UserName] [varchar](256) NULL,
    [Controller] [varchar](50) NULL,
    [Action] [varchar](50) NULL,
 CONSTRAINT [PK_LogEntrys] PRIMARY KEY CLUSTERED 
(
    [LogEntryID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

, а затем обновите модель.Возможно, вам придется полностью удалить старую запись, которая у вас была для нее, в вашем .edmx и повторно добавить ее теперь, когда вы с ней возились.

...