【发布时间】:2017-02-03 11:22:22
【问题描述】:
我是实体框架的初学者。
我正在使用教程学习。
该应用程序包含两个字段和一个提交按钮,应该添加到 SQL SERVER EXPRESS 数据库中。
似乎根本没有与数据库交互。我不知道从哪里开始,因为我没有错误消息,因为我更正了下面的一个。
我的模型:
public class Customer
{
[Key]
[Required]
public int CustomerCode { get; set; }
[Required]
[StringLength(10)]
[RegularExpression("^[A-Z]{7,7}$")]
public string CustomerName { get; set; }
}
我在 web.config 文件中的连接字符串:
<connectionStrings>
<add
name="CustomerDal"
connectionString="Data Source=localhost\SQLExpress;Initial Catalog=MVC2db;Integrated Security=True"
providerName=".NET Framework Data Provider for SQL Server"
/>
我的数据库上下文:
public class CustomerDal : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Customer>().ToTable("tblCustomer");
}
public DbSet<Customer> Customer { get; set; }
}
提交操作:
public ActionResult Submit(
// [ModelBinder(typeof(CustomerBinder))]
Customer obj) //validation runs
{
// Customer obj = new Customer();
// obj.CustomerCode = Request.Form["CustomerCode"];
// obj.CustomerName = Request.Form["CustomerName"];
if (ModelState.IsValid)
{
CustomerDal Dal = new CustomerDal();
Dal.Customer.Add(obj); //in memory
Dal.SaveChanges(); //physical commit
return View("Customer", obj);
}
else
{
return View("EnterCustomer", obj);
}
}
EnterCustomer.cshtml,其中obj来自
' @using (Html.BeginForm("Submit", "Customer", FormMethod.Post)) {
<i>Customer Name : </i> @Html.TextBoxFor(m => m.CustomerName)
<br>
@Html.ValidationMessageFor(x => x.CustomerName)
<br>
<i>Customer Code : </i> @Html.TextBoxFor(m => m.CustomerCode)
<br>
@Html.ValidationMessageFor(x => x.CustomerCode)
<br>
<input id = "Submit1" type = "submit" value = "submit"/>
}
'
我在 SaveChanges 期间收到了关于重复键的第一条错误消息。经过一番研究,我在 global.asax 文件中添加了这一行: Database.SetInitializer(new DropCreateDatabaseIfModelChanges());
从那时起,我没有任何错误消息,但当我输入新项目时没有任何反应。
【问题讨论】:
-
什么是'obj'?
-
你能告诉我们错误吗?
-
由于我尝试将 CustomerCode 的类型更改为 Int,因此错误发生了变化。即使我使用 String 重试,现在的错误是:“支持 'CustomerDal' 上下文的模型自创建数据库以来已更改。考虑使用 Code First 迁移来更新数据库”
-
我编辑了我的消息以显示 obj 的来源。在调试模式下,值 obj.CustomerCode 和 obj.CustomerName 在错误消息出现之前具有正确的值。
-
我不明白 C# 和 SQL 之间的这个额外的数据层是如何工作的。我已删除行 Database.SetInitializer
(new DropCreateDatabaseIfModelChanges ());在 global.asax 中
标签: c# .net entity-framework