This is the expected behaviour of Telerik OpenAccess ORM in case of adding and removing a new object from a collection property of an existing one.
Generally, when you have created a new object and execute the first line from your code snippet, OpenAccess takes care for setting the value of the foreign key of the new object. That means that the new object is added to the context indirectly, in addition to being added to the collection.
When you execute the second line of the snippet, OpenAccess removes the relationship between the two objects. The new object, however, is still in the context and OpenAccess will try to persist it in the database when you call SaveChanges(). And since the value of the foreign key of the new object cannot be NULL, the code throws an exception.
To actually prevent adding the new object to the database you have to call context.Delete(newObject), before you try context.SaveChanges().
Note that this is applicable only in the case you describe. If you want to implement some other scenario, tell us about it and we will offer you the appropriate solution.
More information about the lifecycle of the objects is available here
If you have any other questions, do not hesitate to get back to us.
the Telerik team
Telerik OpenAccess ORM Meets ASP.NET Web API. Read more.