0

我试图找出在将现有对象保存到数据库后更新其 ID 的最佳方法。

例如,在下面的示例中,ContactDetailID在下面的test方法中始终为 0,直到我再次实际获取它,我想在保存项目后立即自动更新它。

单步执行下面的代码ContactDetailID被设置一次context.SaveChanges,并且项目被正确保存到数据库中,所以我只需要将 ID 推回 UI。

做这个的最好方式是什么?

    private void Test()
    {
        int id = 0

        ContactDetail cd = new ContactDetail();
        cd.ContactTypeID = 1;
        cd.Value = "3";
        cd.Save();

        id = cd.ContactDetailID;    
    }

    public void Save()
    {
        ContactDetailDAO service = new ContactDetailDAO();
        ContactDetailDTO saveItem = new ContactDetailDTO();

        if (IsValid(this))
        {
            saveItem.ContactDetailID = this.ContactDetailID;
            saveItem.Value = this.Value;
            saveItem.ContactTypeID = this.ContactTypeID;

            service.Save(saveItem);

            this.ContactDetailID = saveItem.ContactDetailID;
        }
    }

    public void Save(ContactDetailDTO ContactDetailDTO)
    {
        if (ContactDetailDTO.IsNew())
        {
            repository.Add(new tblContactDetail
            {
                ContactDetailID = ContactDetailDTO.ContactDetailID,
                Value = ContactDetailDTO.Value,
                ContactTypeID = ContactDetailDTO.ContactTypeID
            });
        }
    }

    public virtual void Add(T entity)
    {
        context.Entry(entity).State = System.Data.EntityState.Added;

        if (entity == null)
        {
            throw new ArgumentException("Cannot add a null entity.");
        }

        this.context.Set<T>().Add(entity);
        this.context.SaveChanges();
    }
4

2 回答 2

1

或者使用这样的东西:

private void Test()
{
    ContactDetail cd = new ContactDetail();
    cd.ContactTypeID = 1;
    cd.Value = "3";
    cd.Save();
    return cd.ContactDetailID;    
}

public ContactDetailDTO Save()
{
    ContactDetailDAO service = new ContactDetailDAO();
    ContactDetailDTO saveItem = new ContactDetailDTO();

    if (IsValid(this))
    {
        saveItem.ContactDetailID = this.ContactDetailID;
        saveItem.Value = this.Value;
        saveItem.ContactTypeID = this.ContactTypeID;

        saveItem=service.Save(saveItem);

        this.ContactDetailID = saveItem.ContactDetailID;
    }
    return saveItem; 
}

public ContactDetailDTO Save(ContactDetailDTO ContactDetailDTO)
{
    if (ContactDetailDTO.IsNew())
    {
        return repository.Add(new tblContactDetail
        {
            ContactDetailID = ContactDetailDTO.ContactDetailID,
            Value = ContactDetailDTO.Value,
            ContactTypeID = ContactDetailDTO.ContactTypeID
        });
    }
}

public virtual T Add(T entity)
{
    context.Entry(entity).State = System.Data.EntityState.Added;

    if (entity == null)
    {
        throw new ArgumentException("Cannot add a null entity.");
    }

    this.context.Set<T>().Add(entity);
    this.context.SaveChanges();
    return entity;
}
于 2013-05-21T17:37:36.120 回答
0

如果您的 ID 列是自动递增的,它将在之后自动更新SaveChanges,然后您可以轻松地将return值设置为 UI,如下所示:

private void Test()
{
    ContactTypeID = 1;
    Value = "3";
    Save();
    return ContactDetailID;    
}

以及为什么ContactDetail();在分配时创建新的

this.ContactDetailID = saveItem.ContactDetailID;
于 2013-05-21T15:25:55.403 回答