2016-02-23 4 views
0

Я пытаюсь изучить EFCF, но я наткнулся на проблему дублирования записей, и я не могу найти решение в любом месте в Интернете (или я просто не знаю, что искать). Класс DbContext выглядит следующим образом:Entity Framework 6 Код Первые дубликаты

public class Database : DbContext 
{ 
    public Database() : base("name=DBconnString") 
    { 
    } 
    public DbSet<Human> People { get; set; } 


    public void human_add_new(int _rank, String _name, String _surname) 
     { 
      Human dummy = new Human(_rank, String _name, String _surname); 
      People.Add(dummy); 
      SaveChanges(); 
     } 
} 

И человеческий класс следующим образом:

public class Human 
    { 
     [Index(IsUnique = true)] 
     public Int16 ID { get; set; } 
     public int rank { get; set; } 
     public String name { get; set; } 
     public String surname { get; set; } 
    } 

Теперь проблема в том, когда я запускаю мой код, и он выполняет это:

human_add_new(3, "Noname", "Noname"); 

создается новая запись, создавая дубликаты в моей базе данных (поэтому, если я запустил код 5 раз, будет создано 5 идентичных записей). Как я могу это предотвратить? [Index (IsUnique = true)], похоже, не помогает здесь, потому что в более крупной базе данных может случиться, что у двух человек одно имя или одна и та же фамилия.

Вот как это выглядит в MS SQL студии: imgur

ответ

0

Вы применили индекс Unique свойству ID - если вы хотите уникальные имена/фамилии, вам придется применить ограничение уникальности для них, а также ,

(согласно вашему Imgur изображения, идентификаторы различны, другие поля одинаковы)

+0

Но если я буду стараться, чтобы добавить «Джон Смит» и «Кэти Смит», добавив, что последний не будет возможное. – Amai

+1

Ах, тогда вам нужен индекс с несколькими столбцами. IndexAttribute имеет конструктор, который принимает IndexName - хороший ответ здесь - http://stackoverflow.com/a/23090070/2656307 –

+0

Да, это все, спасибо за помощь. ^^ – Amai

Смежные вопросы