This is a migrated thread and some comments may be shown as answers.

Error Message:DeleteRecord-Telerik.OpenAccess.Exceptions.InvalidOperationException: The instance is transient

3 Answers 285 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
This question is locked. New answers and comments are not allowed.
S
Top achievements
Rank 1
S asked on 09 Sep 2014, 02:37 AM
I got the error when I was trying to delete an entity. I checked the entity and I am pretty sure the entity is there. Is there any other reason?

the entity object 
Person_id (PK)
Email (PK)

Thank You

3 Answers, 1 is accepted

Sort by
0
Kristian Nikolov
Telerik team
answered on 10 Sep 2014, 01:14 PM
Hello,

Thank you for contacting us.

When you are working with an instance of a persistent class that instance must be managed by an instance of your model`s context class (the one which derives from OpenAccessContext). With this in mind the most likely reason for the exception you are experiencing is that you are attempting to delete an instance of a persistent class which is not managed by a context.

Such situation can occur in case you attempt to delete a newly created or a cloned instance of a persistent type. We recommend checking your code for logic that might result in such situations and using the AttachCopy method to attach non managed persistent objects to a context instance and then using the returned attached copy  to perform the required operation.

I hope this helps. Should you have further questions feel free to use our forums again.

Regards,
Kristian Nikolov
Telerik
 
OpenAccess ORM is now Telerik Data Access. For more information on the new names, please, check out the Telerik Product Map.
 
0
Waqar
Top achievements
Rank 1
answered on 23 Oct 2014, 10:32 AM
I used the AttachedCopy method as suggested here but got the following error: InvalidOperationException: The instance is transient

public ActionResult _Delete([DataSourceRequest]DataSourceRequest request, CustomerViewModel cust)
{
    if (ModelState.IsValid)
    {
        // Create POCO
        var entity = new OMS_CUSTOMER
        {
            OMS_CUSTOMER_ID = cust.CustomerID,
            CUSTOMERNAME = cust.CustomerName
        };
 
        this.dbContext.AttachCopy(entity);
        this.dbContext.Delete(entity);
    }
 
    // Return the removed product. Also return any validation errors.
    return Json(new[] { cust }.ToDataSourceResult(request, ModelState));
}
0
Kristian Nikolov
Telerik team
answered on 27 Oct 2014, 08:11 AM
Hello Waqar,

Based on the provided code sample, the most likely reason for the behavior you are experiencing is that you are deleting the initial non managed persistent object entity. The AttachCopy method does not actually attach the persistent object which is passed to it as an argument, but rather it creates a copy of it and attaches that copy. For this reason the entity object is not managed by the context and you receive an exception when attempting to perform a delete with that object.

AttachCopy returns the instance of the persistent object it has attached to the context, you have to use this instance in order to perform CRUD operations. With this taken into account, the sample code would look similar to the following:
public ActionResult _Delete([DataSourceRequest]DataSourceRequest request, CustomerViewModel cust)
{
    if (ModelState.IsValid)
    {
        // Create POCO
        var entity = new OMS_CUSTOMER
        {
            OMS_CUSTOMER_ID = cust.CustomerID,
            CUSTOMERNAME = cust.CustomerName
        };
  
        //attach the persistent object
        var attachedEntity = this.dbContext.AttachCopy(entity);
        //use the attached object returned by the AttachCopy method
        //to perform the delete operation
        this.dbContext.Delete(attachedEntity);
    }
  
    // Return the removed product. Also return any validation errors.
    return Json(new[] { cust }.ToDataSourceResult(request, ModelState));
}

I hope this helps. Should you have further questions feel free to post at our forums again.

Regards,
Kristian Nikolov
Telerik
 
OpenAccess ORM is now Telerik Data Access. For more information on the new names, please, check out the Telerik Product Map.
 
Tags
General Discussions
Asked by
S
Top achievements
Rank 1
Answers by
Kristian Nikolov
Telerik team
Waqar
Top achievements
Rank 1
Share this question
or