Within the Insert method there is DBContext in a using statement, so it automatically dispose when needed
Not exactly "when needed". It calls IDisposable.Dispose()
on the context object as soon as it goes out of scope of the using
block.
After that, I need data from the previously inserted element
Your context is disposed at this point. If your action requires lazy loading, that will fail because the context is not available to perform the lazy load.
If you will generally need access to an object that has not been loaded, the most efficient approach is probably to use .Include
to load it when you retrieve the rest of your object graph. That is called eager loading.
If you occasionally need access to an object that is not loaded when you load the rest of your object graph, you will need a new context.
For a discussion of loading related objects, I suggest