This article starts a series of posts covering advanced mapping capabilities introduced in DataObjects.Net 4.6.
In addition to collection of rules, two properties specify default mapping: DefaultSchema and DefaultDatabase. These properties are used as fallback values if no rule matches entity being processed. Note, that 'defaultSchema' option is mandatory if any rules for schemas are specified.
The above example splits model into two schemas. One for persistent types related to blog module. The other one is for forum module. The rest is mapped to 'mysite' schema.
Idea
The idea of advanced mappings is simple — to have a way to spread groups of persistent classes among different database schemas and even different databases according to number of mapping rules.
Basics
Advanced mapping configuration is based on set of mapping rules, each of them defines how to map a particular entity. Mapping rule consists of two logical parts:- condition (defines when the rule is applied)
- mapping (specifies in what database/schema to place the target)
In addition to collection of rules, two properties specify default mapping: DefaultSchema and DefaultDatabase. These properties are used as fallback values if no rule matches entity being processed. Note, that 'defaultSchema' option is mandatory if any rules for schemas are specified.
XML configuration
OK, we are done with theory. Let's write some real mapping configurations. The most trivial one is setting the default schema. This is already supported by DataObjects.Net since version 4.3. Let's recall it:
Starting from version 4.6, we can write more precise mapping rules. They are defined in <mappingRules> element inside domain configuration.
The above example maps all types from namespace 'MyApp.Model.Foo' to schema 'myapp_foo'. All other types are mapped to schema 'myapp' (fallback rule). If you have model with multiple assemblies in might be convenient to map to assembly names instead of namespaces:
<domain defaultSchema="myapp" ... />
Starting from version 4.6, we can write more precise mapping rules. They are defined in <mappingRules> element inside domain configuration.
<domain defaultSchema="myapp" ... > <mappingRules> <rule namespace="MyApp.Model.Foo" schema="myapp_foo" /> </mappingRules> </domain>
The above example maps all types from namespace 'MyApp.Model.Foo' to schema 'myapp_foo'. All other types are mapped to schema 'myapp' (fallback rule). If you have model with multiple assemblies in might be convenient to map to assembly names instead of namespaces:
<domain defaultSchema="mysite" ... > <mappingRules> <rule assembly="MySite.Model.Blog" schema="mysite_blog" /> <rule assembly="MySite.Model.Forum" schema="mysite_forum" /> </mappingRules> </domain>
The above example splits model into two schemas. One for persistent types related to blog module. The other one is for forum module. The rest is mapped to 'mysite' schema.
Fluent configuration
As alternative to XML-based configuration you can programmatically define mapping in code. Mapping rules could be added by using DomainConfiguration.MappingRules collection. Two examples from previous section will look like this:
The last example uses hypothetical 'MySite.Model.Blog.Post' and 'MySite.Model.Forum.Thread' types to discover the corresponding assemblies.
domainConfiguration.DefaultSchema = "myapp"; var rules = domainConfiguration.MappingRules; rules.Map("MyApp.Model.Foo").ToSchema("myapp_foo");
domainConfiguration.DefaultSchema = "mysite"; var rules = domainConfiguration.MappingRules; blogAssembly = typeof (MySite.Model.Blog.Post).Assembly; forumAssembly = typeof (MySite.Model.Forum.Thread).Assembly; rules.Map(blogAssembly).ToSchema("mysite_blog"); rules.Map(forumAssembly).ToSchema("mysite_forum");
The last example uses hypothetical 'MySite.Model.Blog.Post' and 'MySite.Model.Forum.Thread' types to discover the corresponding assemblies.
To be continiued
This post covered basic ideas as well as mapping to multiple schemas. The second part will cover mapping to multiple databases and related application design techniques. Stay tuned.
Be interested in seeing the part 2 to this, unless it is document in another place, I cant see anything in the documentation
ReplyDeleteHello, Unknown, unfortunately part 2 was not written.
DeleteAdvanced mapping configuration topic is not yet in manual but it would be there eventually.
Often the mapping configuration is complex and depends on many factors. The Advanced mapping mode in DataObjects Knowledge Base helps you to deal with this by setting up several conditions as well as nested actions (i.e. run action on several entities not only globally, Pay Someone To Do My Assignment but also separately on each entity) so that you can focus on what really matters in your project.
ReplyDeleteI am interested to learn about coding but all the struggle which I have done was useless. I have also taken some assistance fromassignment writing company but got no benefit. But your provide tips regarding .net coding is very simple and easy. I hope in future, I will become a good coder.
ReplyDeleteI love your blog's insights! If you need mailbox builders in Cache Valley, visit our website
ReplyDelete