2016-08-11 3 views
0

Я только начал изучать Entity Framework, и я пытаюсь вставить данные в базу данных. У меня есть таблица Customer, которая имеет три поля id (int), имя (varchar) и адрес (varchar). Когда я пытаюсь вставить данные в базу данных каждый раз, когда идентификатор вставлен как значение 0.Первичный ключ, всегда вставляющий нуль

Мой Клиент class-

[Table("customer")] 
public class Customer 
{ 
    [Key] 
    [Column("custId")] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int custId { get; set; } 
    public string name { get; set; } 
    public string address { get; set; } 
} 

И мой Вставьте Methods-

static void insertCustomer(Customer cust) 
    { 
     using(var context = new DBEntities()) 
     { 
      Console.WriteLine("ID: " + cust.custId); 
      context.customer.Add(cust); 
      context.SaveChanges(); 
      Console.WriteLine("Customer Inserted Successfully!!!"); 
     } 
    } 

И я звоню Вставить метод как этот

Customer cust = new Customer(); 
cust.custId = 106; 
cust.name = "Prince"; 
cust.address = "Kolkata"; 
insertCustomer(cust); 

Я использую MySql базы данных, пожалуйста, кто-то спасибо, спасибо

+0

показать нам, как вы назначаете данные классу клиентов. – Takarii

+0

Вы предоставляете 'cust' с ID в любом месте? Вы присваиваете ему что-нибудь? Из вашего кода вы создаете поле, но на самом деле не предоставляете ему значение, следовательно, присваивание '0'. –

+0

Я знаю, что на SQL-сервере вы можете назначить автоинкремент в столбце. Каждый раз, когда элемент вставлен с идентификатором 0, новый идентификатор присваивается автоматически. Вы делали это в базе данных MySQL? –

ответ

5

Вы, вероятно, предполагая, что при добавлении

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 

... на имущество, что это говорит EF, чтобы автоматически заполнить значение. Но это не так.

Это на самом деле наоборот. Украшая свойство этим атрибутом, вы сообщаете EF, что ему не нужно проверять или беспокоиться об этом значении, и что база данных позаботится о том, чтобы заселить его с помощью значения автоматического увеличения.

Однако это зависит от того, правильно ли вы определили таблицу базы данных, чтобы произвести это поведение. Это происходит не автоматически. Вы должны убедиться, что таблица MySQL правильно указана в столбце AUTO_INCREMENT.

2

Это время вводится как 0, потому что вы никогда не дают ему значение отличается от него это implicitly initialised значение 0.

Для примера возьмем этот метод:

public void NewCustomer(string _name, int _id) 
{ 
    Customer cust = new Customer(); 
    cust.name = _name; 
    cust.id = _id; 
    InsertCustomer(cust); 
} 

Здесь вы назначаяcust с идентификатором является передан в NewCustomer(). Это может быть приращение, используемое в вашей базе данных, локальная переменная или что-то еще.

Из вашего кода это не очевидно, если вы действительно даете id значение, вы просто печатаете неинициализированную переменную, которой присвоено значение 0.

Редактировать: если вы искали MySQL autoincrement, это делается в вашей базе данных. Затем можно назначить гипсе запись из базы данных в Customer объекта и присвоить id используя ваш {get; set;}

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