保存到数据库后,使用标识更新对象ID

时间:2013-05-21 15:12:34

标签: c# asp.net entity-framework-4 updates

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

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

在调用ContactDetailID后设置context.SaveChanges下面的代码,并将项目正确保存到数据库中,因此我只需将ID重新推送到用户界面。

这样做的最佳方式是什么?

    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();
    }

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

如果您的ID列是自动递增的,它会在SaveChanges之后自动更新,然后您可以轻松地将return值添加到用户界面,如下所示:

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

以及在分配时创建新ContactDetail();的原因

this.ContactDetailID = saveItem.ContactDetailID;