Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 初学者到实体框架_C#_.net_Entity Framework - Fatal编程技术网

C# 初学者到实体框架

C# 初学者到实体框架,c#,.net,entity-framework,C#,.net,Entity Framework,我是实体框架的初学者 我正在使用教程学习 该应用程序包含两个字段和一个提交按钮,应该添加到SQLServerExpress数据库中 似乎根本没有与数据库的交互。我不知道从哪里开始,因为我没有错误消息,因为我更正了下面的一个 我的模型: public class Customer { [Key] [Required] public int CustomerCode { get; set; } [Required] [StringLength(10)]

我是实体框架的初学者

我正在使用教程学习

该应用程序包含两个字段和一个提交按钮,应该添加到SQLServerExpress数据库中

似乎根本没有与数据库的交互。我不知道从哪里开始,因为我没有错误消息,因为我更正了下面的一个

我的模型:

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" 
  />
输入customer.cshtml,obj来自何处

" @使用(Html.BeginForm(“提交”、“客户”、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"/>

            }
Customer Name:@Html.TextBoxFor(m=>m.CustomerName)

@Html.ValidationMessageFor(x=>x.CustomerName)
客户代码:@Html.TextBoxFor(m=>m.CustomerCode)
@Html.ValidationMessageFor(x=>x.CustomerCode)
}
"

在保存更改期间,我收到了第一条关于重复密钥的错误消息。经过一些研究,我在global.asax文件中添加了这一行: SetInitializer(新的DropCreateDatabaseIfModelChanges())


从那时起,我没有任何错误消息,但当我输入一个新项目时,什么也没有发生

您正在创建类型为
CustomerDal
的新空白对象并将其保存。 您已经拥有绑定对象中的所有值
obj

    if (ModelState.IsValid)
    {
        //CustomerDal Dal = new CustomerDal();//REMOVE THIS LINE
        Dal.Customer.Add(obj);     //in memory
        Dal.SaveChanges();          //physical commit 

        return View("Customer", obj);
    }
    else
    { 
        return View("EnterCustomer", obj);
    }
流行于

public ActionResult Submit(
// [ModelBinder(typeof(CustomerBinder))]
Customer obj) //validation runs 
您将获得空对象或null。因此,您不向dbContext添加任何内容,也不保存任何内容


调试应用程序并检查
obj
参数中的值

模型中的键是一个整数,默认为0。保存到数据库时,只有一行可以有该键。您必须转到表设计,并将
CustomerCode
列设置为标识列,以使其在新记录进入时自动递增。使用现有代码,Entity Framework将检索新创建的键并将其放入CustomerCode属性中,以便您可以在代码中的其他位置使用它(如果您愿意)


您提到在尝试解决问题时添加了
DropCreateDatabaseIfModelChanges
;我认为这是不必要的,并且在将来更改模型时可能会产生不必要的影响。

什么是“obj”?您能告诉我们错误吗?因为我尝试将CustomerCode的类型更改为Int,所以错误发生了变化。即使当我用字符串重试时,现在的错误是:“自从创建数据库以来,支持“CuuldDAL”上下文的模型发生了变化。请考虑使用代码第一次迁移来更新数据库。”我编辑了我的消息,以显示Objo来自何处。在调试模式下,obj.CustomerCode和obj.CustomerName的值在错误消息出现之前是正确的。我不明白C#和SQL之间的这一附加数据层是如何工作的。我已经删除了line Database.SetInitializer(新的DropCreateDatabaseIfModelChanges());在global.asax
CustomerDal
中,是OP
DbContext
。在SaveChanges发生错误之前,obj参数具有正确的值
    if (ModelState.IsValid)
    {
        //CustomerDal Dal = new CustomerDal();//REMOVE THIS LINE
        Dal.Customer.Add(obj);     //in memory
        Dal.SaveChanges();          //physical commit 

        return View("Customer", obj);
    }
    else
    { 
        return View("EnterCustomer", obj);
    }
public ActionResult Submit(
// [ModelBinder(typeof(CustomerBinder))]
Customer obj) //validation runs