使用实体框架和Windows窗体插入数据库后获取ID

本文关键字:数据库 插入 获取 ID 窗体 Windows 实体 框架 | 更新日期: 2023-09-27 18:02:35

我有一个Windows窗体项目和一个数据库。我想在表clinic中插入一条记录(创建一个新诊所)。

我在windows窗体中的方法是:

private async void insertToDB(string uri , object DTO ) 
{
    //DTO (or Data Transfer Object) is an instance of a class
    var client = new HttpClient();
    await client.PostAsJsonAsync(uri, DTO);
}

和我的控制器(我的Web API项目)的方法是:

// POST: api/Clinics/createNewClinic
[ResponseType(typeof(Clinic))]
public IHttpActionResult createNewClinic(Clinic clinic)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }
    db.clinics.Add(clinic);
    db.SaveChanges();
    return Ok(clinic.clinicID);
}

这些方法正在工作,但我没有得到ClinicID后插入。我需要做什么改变?

我的代码在我的winform项目是正确的吗?

使用实体框架和Windows窗体插入数据库后获取ID

看起来您正在使用您的数据模型(您的EF生成类)作为参数。你不应该将你的数据模型暴露给你的API,因为它可能包含一些其他的属性/成员供内部/机密使用。相反,创建轻量级的视图模型(DTO),并且几乎只包含getter和setter。

在上面的代码中,如果你在API层代码中实现了视图模型(dto),它看起来像这样:

var entity = db.Set<Clinic>().Create();
//mapping the values of your view models to data models
entity.Name = clinic.Name;
entity.Description = clinic.Descrption; 
//add 
db.clinics.Add(entity);
db.SaveChanges();
return Ok(entity.clinicID);