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

WCF Update method that saves to several datatables

1 Answer 39 Views
Data Access Free Edition
This is a migrated thread and some comments may be shown as answers.
This question is locked. New answers and comments are not allowed.
Jörgen
Top achievements
Rank 1
Jörgen asked on 22 Apr 2013, 11:14 AM
I have a testproject containing an N-Tier solution using WCF Plain Service and OpenAccess ORM Free Edition.

I have created a Windows Form that uses Four Data tables. My WCF Service returns BindingLists that I have databound my Controls to.

On the Form I have an Save Button. When I press it I want to call an Update Method in the WCF Service where I pass along my four Bindinglists. When It gets down to the Business Logic Layer I want to create a transaction and save the Changes in the four database tables.

How do I accomplish this?

The table SysAnvandare is the parent table and the tables SysAnvInstallning and SysAnvRoller are Child tables and the database has Foreign Key constraints between them.

I need help to write the code that uses DataAccess ORM to save these tables to the database.

In My Service Class I have defined this method:

Public Sub UpdateSysAnvandare(dtoSysAnvandare As SysAnvandareDto, dtoSysAnvInstallning As SysAnvInstallningDto, dtoSysAnvRoller As SysAnvRollerDto

 

)

End Sub

1 Answer, 1 is accepted

Sort by
0
Dimitar Tachev
Telerik team
answered on 25 Apr 2013, 11:12 AM
Hi Jörgen,

 
You could update these related entities with the WCF Plain Service generated by the OpenAccess ORM Add OpenAccess Service wizard by specifying a custom Assemble methods for populating all of the navigation properties of your parent entity (the SysAnvandare one).

In this way when you update or get a SysAnvandare object, all of its child objects will be also properly updated in the same transaction without implementing any additional methods.

In order to achieve that you need to create a partial class of your SysAnvandareAssembler and override the Assemble method for converting a Entity to Dto like below:

Namespace Assemblers
 
    Partial Public Class SysAnvandareAssembler
        Public Overrides Function Assemble(ByVal entity As SysAnvandare)
As SysAnvandareDto

            Dim _SysAnvandareDto As SysAnvandareDto = MyBase.Assemble(entity)
 
            ' Get all of the navigation properties along with the DTO
            Me.AssembleNavigational(entity, _SysAnvandareDto)
 
            Return _SysAnvandareDto
        End Function
    End Class
 
End Namespace

Then in order to update all of the entities with the same service call you need also to overload the Assemble method which is converting the DTO to Entity.

The implementation of this method is depending on your tables relationships (1:1, 1:M or M:M) and for your convenience I prepared a sample application demonstrating this approach based on the Products table of the Northwind database - please find it attached. 

In the example you could find how to get and update all of the product related entities (its OrderDetails collection, Supplier and Category) with only one service call - please find the applied changes in the ProductAssembler.partial.vb file. Also there is a sample example of the service usage in the ServiceConsumer application.

You could find more information about handling relationships in the WCF Plain services in this documentation section. Also you could take a look at the article describing the transactions handling by OpenAccess ORM.

I hope this is applicable for you. Do not hesitate to contact us back if you need any further clarifications.

Greetings,
Dimitar Tachev
the Telerik team
Using Encrypted Connection Strings with Telerik OpenAccess ORM. Read our latest blog article >>
Tags
Data Access Free Edition
Asked by
Jörgen
Top achievements
Rank 1
Answers by
Dimitar Tachev
Telerik team
Share this question
or