У меня очень простой класс C #, который содержит один первичный ключ. Я использую EF 6 с первым кодом, и у меня есть два вопроса:
Как мне сделать первичный ключ как
Identity
в коде (и как не сделать его идентификатором)? Некоторым из моих классов требуется, чтобы PK был идентификатором (автоматическое увеличение при добавлении), а некоторым нужно, чтобы он был назначен кодом.Когда я пытаюсь сохранить класс в базе данных, используя:
// This code is actually wrapped by a BusinessContext Class to encapsulate the ORM representation context.Costumers.Add(costumer); //exception is here! context.SaveChanges();
Я получаю следующее исключение для моего класса в методе
Add
:Во время создания модели обнаружена одна или несколько ошибок проверки:
M.Costumer:: EntityType 'Costumer' не имеет определенного ключа. Определите ключ для этого EntityType.
Costumers: EntityType: EntitySet "Costumers" основан на типе "Costumer", для которого не определены ключи.
А это сам класс:
using Microsoft.Practices.Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyApp.Models
{
public class Costumer : BindableBase
{
private string name;
private string city;
private Estado state;
private int costumerId;
[Required]
[StringLength(500)]
public string Name
{
get { return this.name; }
set { SetProperty(ref name, value); }
}
[Required]
[StringLength(500)]
public string City
{
get { return this.city; }
set { SetProperty(ref city, value); }
}
[Required]
public State State
{
get { return this.state; }
set { SetProperty(ref state, value); }
}
[Required]
[Key]
public int CostumerId
{
get { return this.costumerId; }
}
}
}
У класса есть [Key]
, так почему же возникает исключение, говорящее, что ключа нет?
2 ответа
Entity Framework должен иметь геттер и сеттер для любых атрибутов [Key]
.
Если вы хотите указать EF, что вы будете генерировать значения для этого поля, вы можете использовать [DatabaseGeneratedOption.None]
.
DatabaseGeneratedOption < / a> Перечисление имеет 3 разных значения:
- Вычислено - база данных генерирует значение при вставке или обновлении строки.
- Идентичность - база данных генерирует значение при вставке строки.
- Нет - база данных не генерирует значения.
Значение по умолчанию для значения ключа: DatabaseGeneratedOption.Identity
Используйте атрибут [DatabaseGeneratedOption.None] в вашем Ключе.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.