У меня есть 2 таблицы, Table1 имеет первичный ключ 'CustomizationId', и Table2 имеет Customizationid FK, который соответствует этому. Table2 не имеет никакого первичного ключа.
Я пытаюсь добавить новую запись от веб-формы. Я пытаюсь сохранить это к базе данных, и я получаю ошибку:
Customization customization = new Customization();
Code code = new Code();
customization.Name = CustomizationName.Text;
customization.LastUpdated = DateTime.Now;
code.Top = top_js.InnerText;
code.Bottom = bottom_js.InnerText;
//code.CustomizationId = customization.CustomizationId;
customization.Code = code;
entities.AddToCustomizations(customization);
entities.SaveChanges();
Когда я называю SaveChanges, я получаю ошибку, добавляю ли я в прокомментированной строке.
Unable to update the EntitySet 'Code' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation.
Как я обрабатываю эту ситуацию? Я просто хочу добавить в коде в то же самое время, когда я добавляю в Настройке. Таблице 'Code' нужно установить Customizationid на PK/идентификационные данные, установленный Настройкой.
Какие-либо идеи?
Для EF таблица без PK - это представление.
Это означает, что у вас есть два варианта:
Обычно функции модификации - это хранимые процедуры, но вы можете добавить T-SQL непосредственно в SSDL, если у вас нет доступа к базе данных. ..
Т.е. что-то подобное в элементе
EDMX для каждого действия (вставить, обновить и удалить):
<Function Name="InsertCode" BuiltIn="false" IsComposable="false" >
<CommandText>
INSERT dbo.TCode(ID, Name) VALUES (@ID, @Name)
</CommandText>
<Parameter Name="ID" Type="int" Mode="In" />
<Parameter Name="ID" Type="nvarchar(max)" Mode="In" />
</Function>
Как только у вас появятся функции модификации в SSDL, вам нужно сопоставить их так, чтобы EF использовал их по мере необходимости.
В вашей ситуации я рекомендую (1).
Надеюсь, это поможет.
Ура! Алекс