У меня очень простой класс C #, который содержит один первичный ключ. Я использую EF 6 с первым кодом, и у меня есть два вопроса:

  1. Как мне сделать первичный ключ как Identity в коде (и как не сделать его идентификатором)? Некоторым из моих классов требуется, чтобы PK был идентификатором (автоматическое увеличение при добавлении), а некоторым нужно, чтобы он был назначен кодом.

  2. Когда я пытаюсь сохранить класс в базе данных, используя:

    // 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], так почему же возникает исключение, говорящее, что ключа нет?

1
Michel Feinstein 12 Мар 2015 в 07:33

2 ответа

Лучший ответ

Используйте атрибут [DatabaseGeneratedOption.None] в вашем Ключе.

0
tech-gayan 12 Мар 2015 в 04:52