我刚刚使用EF添加实体后如何返回实体?

时间:2013-05-02 05:24:17

标签: entity-framework entity-framework-4 asp.net-web-api

我在我的存储库中使用以下内容:

    public virtual T Add(T entity)
    {
        DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
        if (dbEntityEntry.State != EntityState.Detached)
        {
            dbEntityEntry.State = EntityState.Added;
        }
        else
        {
            DbSet.Add(entity);
        }
    }

我的权利所有人都拥有一个标识列的主键。一旦添加了一个实体,我想返回该实体,这样我就可以填充网格并让主键显示在网格中。

但是如何返回我添加的实体以及主键的详细信息?

仅供参考,这是我用于添加服务的代码:

        try
        {
            var item = _uow.Tests.Add(Test);
            _uow.Commit();
            var response = Request.CreateResponse<Test>(HttpStatusCode.Created, item);
            string uri = Url.Link("DefaultApi", new { id = item.Id });
            response.Headers.Location = new Uri(uri);
            return response;
        }
        catch (DbUpdateException ex)
        {
            return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
        }

如果我在没有返回值的情况下离开我的存储库而是向服务添加一些代码会不会更好?

1 个答案:

答案 0 :(得分:0)

您的代码应返回ID。检查id item列的映射文件 - 看起来应该是这样的:

public class ItemMap : EntityTypeConfiguration<Item>
{
    public ItemMap ()
    {
        // Primary Key
        this.HasKey(t => t.id);

        // Properties
        this.Property(t => t.id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        // .....
    }
}

HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)是告诉EF获取新生成的sql标识值的设置。