主键始终插入零

时间:2016-08-11 12:26:53

标签: c# mysql entity-framework primary-key

我刚刚开始学习实体框架,我正在尝试将数据插入数据库。我有Customer表,它有三个字段id(int),name(varchar)和address(varchar)。当我每次插入ID作为0值时,我试图将数据插入数据库。

我的客户类 -

[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; }
}

我的插入方法 -

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数据库,请有人帮忙,谢谢

2 个答案:

答案 0 :(得分:5)

您可能会假设添加

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

...在属性上,它告诉EF自动填充值。但事实并非如此。

实际上是另一种方式。通过使用该属性修饰属性,您告诉EF它不需要验证或担心该值,并且数据库将负责使用自动递增值填充它。

但是,这依赖于您正确定义数据库表以产生该行为。它不会自动发生。您需要确保MySQL表的列正确定义为AUTO_INCREMENT

答案 1 :(得分: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,并将ID传递给NewCustomer()。这可以是从DB,局部变量或其他任何东西使用的增量。

从你的代码来看,如果你实际上给了id一个值,那么你只是打印一个未初始化的变量并且默认为0

编辑:如果您希望使用MySQL autoincrement,则可在您的数据库中完成。然后,您可以将数据库中的记录转换为Customer对象,并使用id 分配{get; set;}