我刚刚开始学习实体框架,我正在尝试将数据插入数据库。我有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数据库,请有人帮忙,谢谢
答案 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;}