我希望通过WebAPI中的POST调用创建一个EF实体。
控制器方法应如下所示:
[ResponseType(typeof(entity))]
public IHttpActionResult Post(entity e)
{
...
}
entity
类包含ID
的属性,即自动增量主键。
我不希望使用设置了Post
属性的实体对象调用ID
方法。
我可以使用哪些方法来停止发布包含主键的创建对象?
答案 0 :(得分:1)
让我看看我是否理解正确...你想:
POST
,entity
,不含 ID字段作为参数,如果上述内容听起来至少接近您想要的内容,那么我说这是一个常见的问题,但您会以一种不寻常的方式解决这个问题。
让我们说entity
看起来像这样:
public class entity
{
public long ID { get; set; }
public string firstname { get; set; }
public string lastname { get; set; }
}
所以,现在让我解释一下你看到它们的选择:
如果您的entity
对象非常简单,那么您可以通过添加firstname
属性来传递URI中的lastname
和[FromUri]
参数方法定义中的所有参数,并调整客户端代码以将此信息作为URI中的查询字符串传递。
如果您的entity
对象比上面的简单示例复杂得多,那么您可以创建一个DTO(数据传输对象),其中包含您需要传递到数据库的所有EF模型参数创建entity
,除了 ID
,在这种情况下只是firstname
和lastname
,并将其传递给Post
方法作为([FromBody]
)参数并调整您的客户端代码以在请求正文中传递此信息(可能是简单的JSON)。
然后您可以从数据库而不是整个entity
返回 自动递增的ID,因为您已经拥有所有其他信息(因为您已将其传递给您service' Post
方法作为参数!)。