Asp.net web api 未创建Id的Web Api后期插入数据

Asp.net web api 未创建Id的Web Api后期插入数据,asp.net-web-api,json.net,Asp.net Web Api,Json.net,我正在学习将数据传递到Web API。我创建了一个web Api项目,我正在使用Ado.Net Entities DataModel base On DataBase First方法来完成这个项目,我遇到了如下所述的问题 我创建了一个控制器。 这里我使用[FromBody]来接收JSON数据: public class CustomerController : ApiController {    ICustomerRepository repository = new CustomerRep

我正在学习将数据传递到Web API。我创建了一个web Api项目,我正在使用Ado.Net Entities DataModel base On DataBase First方法来完成这个项目,我遇到了如下所述的问题

我创建了一个控制器。
这里我使用
[FromBody]
来接收JSON数据:

public class CustomerController : ApiController
{
    ICustomerRepository repository = new CustomerRepository()

    [HttpPost]
    public void PostContact([FromBody] Customer contact)
    {
        repository.Add(contact);
    }
  
    ...
}
我正在使用存储库模式来处理CRUD。
以下是我的课程:

public interface ICustomerRepository
{
    IEnumerable<Customer> GetAll();
    Customer GetById(int CustId);
    int Update(Customer Cust);
    void Add(Customer Cust);
    void Delete(int CustId);
}

public class CustomerRepository : ICustomerRepository
{
    // using Ado.net Entities
    MyEntities ctx = new MyEntities();

    public void Add(Customer contact)
    {       
        var addedContact = ctx.Customers.Add(contact);
        ctx.SaveChanges();
    }

    ...
}
当我对通过SSMS手动插入表中的第一条记录执行
GetById
时,我的Web API是正常的。我用Fiddler为第二位客户做测试

  • 我在Fiddler中使用了POST selection
  • 我补充说

    Accept: application/json
    Content-Type : application/json
    
  • 我在post的请求正文部分添加了这个JSON数据字符串

    {
      "CustomerName": "David2",
      "CustomerPassword": "12345672",
      "CustomerEmailAddr": "123,Motoway ",
      "CustomerMobileNo": "968772322",
      "CreatedOn": "04/25/2017"
    }    
    
  • 在Fiddler中执行POST时出现问题:

    没有生成
    CustID
    。有一个新行的客户ID为
    0
    该表仅显示不带
    CustId
    CustId 0
    )的其余数据

    更新

    我已经为
    CustId
    设置了
    PrimaryKey
    ,并在属性中设置了这些:

    Is Identity: yes, 
    Identity Increment: 1 
    Identity Seed: 1
    
    当我执行POST时,会收到以下错误消息:

    System.Data.SqlClient.SqlException:当identity_insert设置为OFF时,无法在表“Customers”中插入identity列的显式值

    更新:

    This is the class name inside the Edmx:
    
        using System;
        using System.Collections.Generic;
    
    
        public partial class Customer
        {      
    
            public int CustId { get; set; }
            public string CustomerName { get; set; }
            public string CustomerPassword { get; set; }
            public string CustomerEmailAddr { get; set; }
            public string CustomerMobileNo { get; set; }
            public Nullable<System.DateTime> CreatedOn { get; set; }
        }
    
    这是Edmx中的类名:
    使用制度;
    使用System.Collections.Generic;
    公共部分类客户
    {      
    public int CustId{get;set;}
    公共字符串CustomerName{get;set;}
    公共字符串CustomerPassword{get;set;}
    公共字符串CustomerEmailAddr{get;set;}
    公共字符串CustomerMobileNo{get;set;}
    公共可空CreatedOn{get;set;}
    }
    
    CustId是主键还是自动递增?如果没有,则使用自动递增的CustId主键

    oops。。。。!是我的错。你是对的。我试图设置的是身份,我得到这个消息:保存更改是不允许的。有办法处理吗?发生了一件有趣的事。我删除了表并重新创建了一个。现在,没有插入任何内容!我的代码有问题吗?我已经为CustId设置了primaryKey,并在属性中设置了这些:标识是,标识增量1标识种子1。当我执行帖子的时候。我收到此错误消息:System.Data.SqlClient.SqlException:当identity\u insert设置为OFF时,无法在表“Customers”中为identity列插入显式值。@MilkBottle,因为您的表的主键(CustId)未设置为自动递增。我在SSMS中对CustId执行了此操作:我已为CustId设置了primaryKey,并在属性中设置这些:是标识是,标识增量1标识种子1。请告知这是否是错误的。您好,请您共享保存操作代码,以便我可以看到详细信息和表脚本,以及需要检查它是否正确或可能需要一些更改!当我基于数据库优先方法创建Web api项目时,Ado.net Entities DataModel和EntityFramework v6提供了保存操作。这就是我使用的方法。是的,我知道entity framework具有添加对象的功能,意味着在表中添加新记录,但您是如何保存它的,我想看看如何为同一个表类创建clone或viewmodel,或者直接保存一个类的未来对象?请在问题中提供任何代码,以便我可以准确地帮助您解决问题。请查看更新。类模型在edmx中。亲爱的,我想问的是保存操作,而不是类主体,在保存细节的地方发布api post方法的代码。
    This is the class name inside the Edmx:
    
        using System;
        using System.Collections.Generic;
    
    
        public partial class Customer
        {      
    
            public int CustId { get; set; }
            public string CustomerName { get; set; }
            public string CustomerPassword { get; set; }
            public string CustomerEmailAddr { get; set; }
            public string CustomerMobileNo { get; set; }
            public Nullable<System.DateTime> CreatedOn { get; set; }
        }