Chapter 10. Schema Inference

As previously noted, Elementary can automatically infer a lot of the schema for your database. This is done at load-time, not at run-time, which means there is no performance penalty other than at start-up when you use inference.

At any point in time you can see what is being inferred, along with what's been loaded, by printing out Elementary.LoadLog. Example:

Console.WriteLine(Elementary.LoadLog);

In the case of our previous 1-n example, here is the load log:

Loading assembly Elementary.Northwind.Samples
	Loading class: Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGenericInferred.Category
		Alias: Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGenericInferred.Category
		Loading property: Id
		Loading property: Name
		Loading property: Description
		Loading property: Picture
	Loading class: Elementary.Northwind.Samples.Attributes.MappingInheritance.ProductInfo
		Alias: Elementary.Northwind.Samples.Attributes.MappingInheritance.ProductInfo
		Loading property: CategoryID
		Loading property: ProductID
		Loading property: ProductName
		Loading property: SupplierID
	Loading class: Elementary.Northwind.Samples.Attributes.MappingInheritance.ProductDetail
		Alias: Elementary.Northwind.Samples.Attributes.MappingInheritance.ProductDetail
		Loading property: QuantityPerUnit
		Loading property: UnitPrice
		Loading property: UnitsInStock
		Loading property: UnitsOnOrder
		Loading property: ReorderLevel
		Loading property: Discontinued
		Loading property: CategoryID
		Loading property: ProductID
		Loading property: ProductName
		Loading property: SupplierID
	Loading class: Elementary.Northwind.Samples.Attributes.MappingInheritance.Products
		Alias: Elementary.Northwind.Samples.Attributes.MappingInheritance.Products
		Loading property: CategoryID
		Loading property: ProductID
		Loading property: ProductName
		Loading property: SupplierID
	Loading class: Elementary.Northwind.Samples.Attributes.SimpleExample.Product
		Alias: Elementary.Northwind.Samples.Attributes.SimpleExample.Product
		Loading property: CategoryID
		Loading property: ProductID
		Loading property: ProductName
		Loading property: SupplierID
	Loading class: Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGenericInferred.Supplier
		Alias: Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGenericInferred.Supplier
		Loading property: CompanyName
		Loading property: SupplierID
		Loading property: Products (1-n :: Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGenericInferred.Product)
	Loading class: Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGenericInferred.Product
		Alias: Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGenericInferred.Product
		Loading property: CategoryID
		Loading property: ProductID
		Loading property: ProductName
		Loading property: SupplierID
		Loading property: Category (1-1 :: Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGenericInferred.Category)
	Loading class: Elementary.Northwind.Samples.Attributes.ChildMappingNToNGenericInferred.Employee
		Alias: Elementary.Northwind.Samples.Attributes.ChildMappingNToNGenericInferred.Employee
		Loading property: EmployeeID
		Loading property: FirstName
		Loading property: LastName
		Loading property: Territories (n-n :: Elementary.Northwind.Samples.Attributes.ChildMappingNToNGenericInferred.Territory)
				Join: 
				Inverse: False
	Loading class: Elementary.Northwind.Samples.Attributes.ChildMappingNToNGenericInferred.Territory
		Alias: Elementary.Northwind.Samples.Attributes.ChildMappingNToNGenericInferred.Territory
		Loading property: RegionID
		Loading property: TerritoryDescription
		Loading property: TerritoryID
		Loading property: Employees (n-n :: Elementary.Northwind.Samples.Attributes.ChildMappingNToNGenericInferred.Employee)
				Join: 
				Inverse: False
	Loading class: Elementary.Northwind.Samples.Attributes.ChildMappingOneToOneInferred.Category
		Alias: Elementary.Northwind.Samples.Attributes.ChildMappingOneToOneInferred.Category
		Loading property: Id
		Loading property: Name
		Loading property: Description
		Loading property: Picture
	Loading class: Elementary.Northwind.Samples.Attributes.ChildMappingOneToOneInferred.Product
		Alias: Elementary.Northwind.Samples.Attributes.ChildMappingOneToOneInferred.Product
		Loading property: CategoryID
		Loading property: ProductID
		Loading property: ProductName
		Loading property: SupplierID
		Loading property: Category (1-1 :: Elementary.Northwind.Samples.Attributes.ChildMappingOneToOneInferred.Category)
				SyncTarget: CategoryID
				SyncSource: Id
	Loading class: Elementary.Northwind.Samples.Attributes.AliasesAndFilters.Product
		Alias: Elementary.Northwind.Samples.Attributes.AliasesAndFilters.Product
		Loading property: CategoryID
		Loading property: ProductID
		Loading property: ProductName
		Loading property: SupplierID
		Loading property: QuantityPerUnit
		Loading property: UnitPrice
		Loading property: Discontinued
	Loading class: Elementary.Northwind.Samples.Attributes.AliasesAndFilters.DiscontinuedProduct
		Alias: Elementary.Northwind.Samples.Attributes.AliasesAndFilters.DiscontinuedProduct
		SqlFilter: Discontinued = 1
		Loading property: CategoryID
		Loading property: ProductID
		Loading property: ProductName
		Loading property: SupplierID
		Loading property: QuantityPerUnit
		Loading property: UnitPrice
		Loading property: Discontinued
	Loading class: Elementary.Northwind.Samples.Attributes.AliasesAndFilters.DiscontinuedProductStartingWithC
		Alias: Elementary.Northwind.Samples.Attributes.AliasesAndFilters.DiscontinuedProductStartingWithC
		SqlFilter: ProductName LIKE 'C%' AND Discontinued = 1
		Loading property: CategoryID
		Loading property: ProductID
		Loading property: ProductName
		Loading property: SupplierID
		Loading property: QuantityPerUnit
		Loading property: UnitPrice
		Loading property: Discontinued
	Loading class: Elementary.Northwind.Samples.Attributes.AliasesAndFilters.OutOfStockProduct
		Alias: Elementary.Northwind.Samples.Attributes.AliasesAndFilters.OutOfStockProduct
		SqlFilter: UnitsInStock=0
		Loading property: UnitsInStock
		Loading property: UnitsOnOrder
		Loading property: ReorderLevel
		Loading property: CategoryID
		Loading property: ProductID
		Loading property: ProductName
		Loading property: SupplierID
		Loading property: QuantityPerUnit
		Loading property: UnitPrice
		Loading property: Discontinued
	Loading class: Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGeneric.Category
		Alias: Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGeneric.Category
		Loading property: Id
		Loading property: Name
		Loading property: Description
		Loading property: Picture
	Loading class: Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGeneric.Product
		Alias: Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGeneric.Product
		Loading property: CategoryID
		Loading property: ProductID
		Loading property: ProductName
		Loading property: SupplierID
		Loading property: Category (1-1 :: Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGeneric.Category)
				Parent-Child Column Mapping: categoryid-categoryid
				SyncTarget: CategoryID
				SyncSource: Id
	Loading class: Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGeneric.Supplier
		Alias: Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGeneric.Supplier
		Loading property: CompanyName
		Loading property: SupplierID
		Loading property: Products (1-n :: Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGeneric.Product)
				Parent-Child Column Mapping: supplierid-supplierid
	Loading class: Elementary.Northwind.Samples.Attributes.ChildMappingOneToOne.Category
		Alias: Elementary.Northwind.Samples.Attributes.ChildMappingOneToOne.Category
		Loading property: Id
		Loading property: Name
		Loading property: Description
		Loading property: Picture
	Loading class: Elementary.Northwind.Samples.Attributes.ChildMappingOneToOne.Product
		Alias: Elementary.Northwind.Samples.Attributes.ChildMappingOneToOne.Product
		Loading property: CategoryID
		Loading property: ProductID
		Loading property: ProductName
		Loading property: SupplierID
		Loading property: Category (1-1 :: Elementary.Northwind.Samples.Attributes.ChildMappingOneToOne.Category)
				Parent-Child Column Mapping: categoryid-categoryid
				SyncTarget: CategoryID
				SyncSource: Id
	Loading class: Elementary.Northwind.Samples.Attributes.ChildMappingNToNGeneric.Employee
		Alias: Elementary.Northwind.Samples.Attributes.ChildMappingNToNGeneric.Employee
		Loading property: EmployeeID
		Loading property: FirstName
		Loading property: LastName
		Loading property: Territories (n-n :: Elementary.Northwind.Samples.Attributes.ChildMappingNToNGeneric.Territory)
				Through: employeeterritories
	Loading class: Elementary.Northwind.Samples.Attributes.ChildMappingNToNGeneric.Territory
		Alias: Elementary.Northwind.Samples.Attributes.ChildMappingNToNGeneric.Territory
		Loading property: RegionID
		Loading property: TerritoryDescription
		Loading property: TerritoryID
		Loading property: Employees (n-n :: Elementary.Northwind.Samples.Attributes.ChildMappingNToNGeneric.Employee)
				Through: employeeterritories
Loading assembly: Elementary.Northwind.Samples
Loading database: Test
	AutoRetrieveSchema: True
	Create Dynamic Classes: False
	Create Schema: False
	Connection String: Data Source=localhost; Initial Catalog=northwind; User ID=sa; Password=; Trusted_Connection=false;
	OleDb Connection String: Provider=sqloledb;Data Source=localhost; Initial Catalog=northwind; User ID=sa; Password=;
	Validate Connection: True
	Validate OleDb Connection: True
	Validate Schema: True
	Loading dynamic table: alphabetical list of products
		Loading dynamic column: categoryid
		Loading dynamic column: categoryname
		Loading dynamic column: discontinued
		Loading dynamic column: productid
		Loading dynamic column: productname
		Loading dynamic column: quantityperunit
		Loading dynamic column: reorderlevel
		Loading dynamic column: supplierid
		Loading dynamic column: unitprice
		Loading dynamic column: unitsinstock
		Loading dynamic column: unitsonorder
	Loading dynamic table: categories
		Loading dynamic column: categoryid (PK)
			Loading dynamic join: categoriesproducts
				Loading dynamic join table: categories - categoryid
				Loading dynamic join table: products - categoryid
		Loading dynamic column: categoryname
		Loading dynamic column: description
		Loading dynamic column: picture
	Loading dynamic table: category sales for 1997
		Loading dynamic column: categoryname
		Loading dynamic column: categorysales
	Loading dynamic table: current product list
		Loading dynamic column: productid
		Loading dynamic column: productname
	Loading dynamic table: customer and suppliers by city
		Loading dynamic column: city
		Loading dynamic column: companyname
		Loading dynamic column: contactname
		Loading dynamic column: relationship
	Loading dynamic table: customercustomerdemo
		Loading dynamic column: customerid (PK) (FK)
		Loading dynamic column: customertypeid (PK) (FK)
	Loading dynamic table: customerdemographics
		Loading dynamic column: customerdesc
		Loading dynamic column: customertypeid (PK)
			Loading dynamic join: customerdemographicscustomercustomerdemo
				Loading dynamic join table: customerdemographics - customertypeid
				Loading dynamic join table: customercustomerdemo - customertypeid
	Loading dynamic table: customers
		Loading dynamic column: address
		Loading dynamic column: city
		Loading dynamic column: companyname
		Loading dynamic column: contactname
		Loading dynamic column: contacttitle
		Loading dynamic column: country
		Loading dynamic column: customerid (PK)
			Loading dynamic join: customerscustomercustomerdemo
				Loading dynamic join table: customers - customerid
				Loading dynamic join table: customercustomerdemo - customerid
			Loading dynamic join: customersorders
				Loading dynamic join table: customers - customerid
				Loading dynamic join table: orders - customerid
		Loading dynamic column: fax
		Loading dynamic column: phone
		Loading dynamic column: postalcode
		Loading dynamic column: region
	Loading dynamic table: employees
		Loading dynamic column: address
		Loading dynamic column: birthdate
		Loading dynamic column: city
		Loading dynamic column: country
		Loading dynamic column: employeeid (PK)
			Loading dynamic join: employeesemployees
				Loading dynamic join table: employees - employeeid
				Loading dynamic join table: employees - reportsto
			Loading dynamic join: employeesemployeeterritories
				Loading dynamic join table: employees - employeeid
				Loading dynamic join table: employeeterritories - employeeid
			Loading dynamic join: employeesorders
				Loading dynamic join table: employees - employeeid
				Loading dynamic join table: orders - employeeid
		Loading dynamic column: extension
		Loading dynamic column: firstname
		Loading dynamic column: hiredate
		Loading dynamic column: homephone
		Loading dynamic column: lastname
		Loading dynamic column: notes
		Loading dynamic column: photo
		Loading dynamic column: photopath
		Loading dynamic column: postalcode
		Loading dynamic column: region
		Loading dynamic column: reportsto (FK)
		Loading dynamic column: title
		Loading dynamic column: titleofcourtesy
	Loading dynamic table: employeeterritories
		Loading dynamic column: employeeid (PK) (FK)
		Loading dynamic column: territoryid (PK) (FK)
	Loading dynamic table: invoices
		Loading dynamic column: address
		Loading dynamic column: city
		Loading dynamic column: country
		Loading dynamic column: customerid
		Loading dynamic column: customername
		Loading dynamic column: discount
		Loading dynamic column: employeeid
		Loading dynamic column: extendedprice
		Loading dynamic column: freight
		Loading dynamic column: orderdate
		Loading dynamic column: orderid
		Loading dynamic column: postalcode
		Loading dynamic column: productid
		Loading dynamic column: productname
		Loading dynamic column: quantity
		Loading dynamic column: region
		Loading dynamic column: requireddate
		Loading dynamic column: salesperson
		Loading dynamic column: shipaddress
		Loading dynamic column: shipcity
		Loading dynamic column: shipcountry
		Loading dynamic column: shipname
		Loading dynamic column: shippeddate
		Loading dynamic column: shipperid
		Loading dynamic column: shippername
		Loading dynamic column: shippostalcode
		Loading dynamic column: shipregion
		Loading dynamic column: unitprice
	Loading dynamic table: order details
		Loading dynamic column: discount
		Loading dynamic column: orderid (PK) (FK)
		Loading dynamic column: productid (PK) (FK)
		Loading dynamic column: quantity
		Loading dynamic column: unitprice
	Loading dynamic table: order details extended
		Loading dynamic column: discount
		Loading dynamic column: extendedprice
		Loading dynamic column: orderid
		Loading dynamic column: productid
		Loading dynamic column: productname
		Loading dynamic column: quantity
		Loading dynamic column: unitprice
	Loading dynamic table: order subtotals
		Loading dynamic column: orderid
		Loading dynamic column: subtotal
	Loading dynamic table: orders
		Loading dynamic column: customerid (FK)
		Loading dynamic column: employeeid (FK)
		Loading dynamic column: freight
		Loading dynamic column: orderdate
		Loading dynamic column: orderid (PK)
			Loading dynamic join: ordersorder details
				Loading dynamic join table: orders - orderid
				Loading dynamic join table: order details - orderid
		Loading dynamic column: requireddate
		Loading dynamic column: shipaddress
		Loading dynamic column: shipcity
		Loading dynamic column: shipcountry
		Loading dynamic column: shipname
		Loading dynamic column: shippeddate
		Loading dynamic column: shippostalcode
		Loading dynamic column: shipregion
		Loading dynamic column: shipvia (FK)
	Loading dynamic table: orders qry
		Loading dynamic column: address
		Loading dynamic column: city
		Loading dynamic column: companyname
		Loading dynamic column: country
		Loading dynamic column: customerid
		Loading dynamic column: employeeid
		Loading dynamic column: freight
		Loading dynamic column: orderdate
		Loading dynamic column: orderid
		Loading dynamic column: postalcode
		Loading dynamic column: region
		Loading dynamic column: requireddate
		Loading dynamic column: shipaddress
		Loading dynamic column: shipcity
		Loading dynamic column: shipcountry
		Loading dynamic column: shipname
		Loading dynamic column: shippeddate
		Loading dynamic column: shippostalcode
		Loading dynamic column: shipregion
		Loading dynamic column: shipvia
	Loading dynamic table: product sales for 1997
		Loading dynamic column: categoryname
		Loading dynamic column: productname
		Loading dynamic column: productsales
	Loading dynamic table: products
		Loading dynamic column: categoryid (FK)
		Loading dynamic column: discontinued
		Loading dynamic column: productid (PK)
			Loading dynamic join: productsorder details
				Loading dynamic join table: products - productid
				Loading dynamic join table: order details - productid
		Loading dynamic column: productname
		Loading dynamic column: quantityperunit
		Loading dynamic column: reorderlevel
		Loading dynamic column: supplierid (FK)
		Loading dynamic column: unitprice
		Loading dynamic column: unitsinstock
		Loading dynamic column: unitsonorder
	Loading dynamic table: products above average price
		Loading dynamic column: productid
		Loading dynamic column: productname
		Loading dynamic column: unitprice
	Loading dynamic table: products by category
		Loading dynamic column: categoryid
		Loading dynamic column: categoryname
		Loading dynamic column: discontinued
		Loading dynamic column: productid
		Loading dynamic column: productname
		Loading dynamic column: quantityperunit
		Loading dynamic column: unitsinstock
	Loading dynamic table: quarterly orders
		Loading dynamic column: city
		Loading dynamic column: companyname
		Loading dynamic column: country
		Loading dynamic column: customerid
	Loading dynamic table: region
		Loading dynamic column: regiondescription
		Loading dynamic column: regionid (PK)
			Loading dynamic join: regionterritories
				Loading dynamic join table: region - regionid
				Loading dynamic join table: territories - regionid
	Loading dynamic table: sales by category
		Loading dynamic column: categoryid
		Loading dynamic column: categoryname
		Loading dynamic column: productname
		Loading dynamic column: productsales
	Loading dynamic table: sales totals by amount
		Loading dynamic column: companyname
		Loading dynamic column: orderid
		Loading dynamic column: saleamount
		Loading dynamic column: shippeddate
	Loading dynamic table: shippers
		Loading dynamic column: companyname
		Loading dynamic column: phone
		Loading dynamic column: shipperid (PK)
			Loading dynamic join: shippersorders
				Loading dynamic join table: shippers - shipperid
				Loading dynamic join table: orders - shipvia
	Loading dynamic table: summary of sales by quarter
		Loading dynamic column: orderid
		Loading dynamic column: shippeddate
		Loading dynamic column: subtotal
	Loading dynamic table: summary of sales by year
		Loading dynamic column: orderid
		Loading dynamic column: shippeddate
		Loading dynamic column: subtotal
	Loading dynamic table: suppliers
		Loading dynamic column: address
		Loading dynamic column: city
		Loading dynamic column: companyname
		Loading dynamic column: contactname
		Loading dynamic column: contacttitle
		Loading dynamic column: country
		Loading dynamic column: fax
		Loading dynamic column: homepage
		Loading dynamic column: phone
		Loading dynamic column: postalcode
		Loading dynamic column: region
		Loading dynamic column: supplierid (PK)
			Loading dynamic join: suppliersproducts
				Loading dynamic join table: suppliers - supplierid
				Loading dynamic join table: products - supplierid
	Loading dynamic table: territories
		Loading dynamic column: regionid (FK)
		Loading dynamic column: territorydescription
		Loading dynamic column: territoryid (PK)
			Loading dynamic join: territoriesemployeeterritories
				Loading dynamic join table: territories - territoryid
				Loading dynamic join table: employeeterritories - territoryid
	Inferring class relationships...
		Inferring tables for classes...
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToOneInferred.Category]
				Looking for table match...
					Looking for elementary.northwind.samples.attributes.childmappingonetooneinferred.category...
					Looking for elementary.northwind.samples.attributes.childmappingonetooneinferred.categories...
					Looking for category...
					Looking for categories...
					Found match: categories
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGeneric.Supplier]
			[Elementary.Northwind.Samples.Attributes.ChildMappingNToNGeneric.Territory]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToOne.Category]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGenericInferred.Supplier]
				Looking for table match...
					Looking for elementary.northwind.samples.attributes.childmappingonetongenericinferred.supplier...
					Looking for elementary.northwind.samples.attributes.childmappingonetongenericinferred.suppliers...
					Looking for supplier...
					Looking for suppliers...
					Found match: suppliers
			[Elementary.Northwind.Samples.Attributes.AliasesAndFilters.DiscontinuedProduct]
			[Elementary.Northwind.Samples.Attributes.ChildMappingNToNGenericInferred.Employee]
				Looking for table match...
					Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employee...
					Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employees...
					Looking for employee...
					Looking for employees...
					Found match: employees
			[Elementary.Northwind.Samples.Attributes.AliasesAndFilters.DiscontinuedProductStartingWithC]
			[Elementary.Northwind.Samples.Attributes.MappingInheritance.ProductInfo]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToOneInferred.Product]
				Looking for table match...
					Looking for elementary.northwind.samples.attributes.childmappingonetooneinferred.product...
					Looking for elementary.northwind.samples.attributes.childmappingonetooneinferred.products...
					Looking for product...
					Looking for products...
					Found match: products
			[Elementary.Northwind.Samples.Attributes.MappingInheritance.ProductDetail]
			[Elementary.Northwind.Samples.Attributes.ChildMappingNToNGeneric.Employee]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToOne.Product]
			[Elementary.Northwind.Samples.Attributes.AliasesAndFilters.Product]
				Looking for table match...
					Looking for elementary.northwind.samples.attributes.aliasesandfilters.product...
					Looking for elementary.northwind.samples.attributes.aliasesandfilters.products...
					Looking for product...
					Looking for products...
					Found match: products
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGeneric.Product]
			[Elementary.Northwind.Samples.Attributes.SimpleExample.Product]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGenericInferred.Category]
				Looking for table match...
					Looking for elementary.northwind.samples.attributes.childmappingonetongenericinferred.category...
					Looking for elementary.northwind.samples.attributes.childmappingonetongenericinferred.categories...
					Looking for category...
					Looking for categories...
					Found match: categories
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGeneric.Category]
			[Elementary.Northwind.Samples.Attributes.ChildMappingNToNGenericInferred.Territory]
				Looking for table match...
					Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territory...
					Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territories...
					Looking for territory...
					Looking for territories...
					Found match: territories
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGenericInferred.Product]
				Looking for table match...
					Looking for elementary.northwind.samples.attributes.childmappingonetongenericinferred.product...
					Looking for elementary.northwind.samples.attributes.childmappingonetongenericinferred.products...
					Looking for product...
					Looking for products...
					Found match: products
			[Elementary.Northwind.Samples.Attributes.MappingInheritance.Products]
				Looking for table match...
					Looking for elementary.northwind.samples.attributes.mappinginheritance.product...
					Looking for elementary.northwind.samples.attributes.mappinginheritance.products...
					Looking for product...
					Looking for products...
					Found match: products
			[Elementary.Northwind.Samples.Attributes.AliasesAndFilters.OutOfStockProduct]
		Inferring through tables for classes...
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToOneInferred.Category]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGeneric.Supplier]
			[Elementary.Northwind.Samples.Attributes.ChildMappingNToNGeneric.Territory]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToOne.Category]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGenericInferred.Supplier]
			[Elementary.Northwind.Samples.Attributes.AliasesAndFilters.DiscontinuedProduct]
			[Elementary.Northwind.Samples.Attributes.ChildMappingNToNGenericInferred.Employee]
				Looking for through table match...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeeselementary.northwind.samples.attributes.childmappingntongenericinferred.territories...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeesterritories...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeesterritories...
						Looking for employeesterritories...
						Looking for employeeselementary.northwind.samples.attributes.childmappingntongenericinferred.territories...
						Looking for employeesterritories...
						Looking for employeesterritories...
						Looking for employeeselementary.northwind.samples.attributes.childmappingntongenericinferred.territories...
						Looking for employeesterritories...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeeelementary.northwind.samples.attributes.childmappingntongenericinferred.territory...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeeterritory...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeeterritory...
						Looking for employeeterritory...
						Looking for employeeelementary.northwind.samples.attributes.childmappingntongenericinferred.territory...
						Looking for employeeterritory...
						Looking for employeterritory...
						Looking for employeelementary.northwind.samples.attributes.childmappingntongenericinferred.territory...
						Looking for employeterritory...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeeelementary.northwind.samples.attributes.childmappingntongenericinferred.territories...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeeterritories...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeeterritories...
						Looking for employeeterritories...
				Found match: employeeterritories
			[Elementary.Northwind.Samples.Attributes.AliasesAndFilters.DiscontinuedProductStartingWithC]
			[Elementary.Northwind.Samples.Attributes.MappingInheritance.ProductInfo]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToOneInferred.Product]
			[Elementary.Northwind.Samples.Attributes.MappingInheritance.ProductDetail]
			[Elementary.Northwind.Samples.Attributes.ChildMappingNToNGeneric.Employee]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToOne.Product]
			[Elementary.Northwind.Samples.Attributes.AliasesAndFilters.Product]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGeneric.Product]
			[Elementary.Northwind.Samples.Attributes.SimpleExample.Product]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGenericInferred.Category]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGeneric.Category]
			[Elementary.Northwind.Samples.Attributes.ChildMappingNToNGenericInferred.Territory]
				Looking for through table match...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territorieselementary.northwind.samples.attributes.childmappingntongenericinferred.employees...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territoriesemployees...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territoriesemployees...
						Looking for territoriesemployees...
						Looking for territorieselementary.northwind.samples.attributes.childmappingntongenericinferred.employees...
						Looking for territoriesemployees...
						Looking for territoriesemployees...
						Looking for territorieselementary.northwind.samples.attributes.childmappingntongenericinferred.employees...
						Looking for territoriesemployees...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territoryelementary.northwind.samples.attributes.childmappingntongenericinferred.employee...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territoryemployee...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territoryemploye...
						Looking for territoryemployee...
						Looking for territoryelementary.northwind.samples.attributes.childmappingntongenericinferred.employee...
						Looking for territoryemploye...
						Looking for territoryemploye...
						Looking for territoryelementary.northwind.samples.attributes.childmappingntongenericinferred.employee...
						Looking for territoryemployee...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territoryelementary.northwind.samples.attributes.childmappingntongenericinferred.employees...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territoryemployees...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territoryemployees...
						Looking for territoryemployees...
						Looking for territoryelementary.northwind.samples.attributes.childmappingntongenericinferred.employees...
						Looking for territoryemployees...
						Looking for territoryemployees...
						Looking for territoryelementary.northwind.samples.attributes.childmappingntongenericinferred.employees...
						Looking for territoryemployees...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territorieselementary.northwind.samples.attributes.childmappingntongenericinferred.employee...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territoriesemployee...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territoriesemploye...
						Looking for territoriesemployee...
						Looking for territorieselementary.northwind.samples.attributes.childmappingntongenericinferred.employee...
						Looking for territoriesemploye...
						Looking for territoriesemploye...
						Looking for territorieselementary.northwind.samples.attributes.childmappingntongenericinferred.employee...
						Looking for territoriesemployee...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territories_elementary.northwind.samples.attributes.childmappingntongenericinferred.employees...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territories_employees...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territories_employees...
						Looking for territories_employees...
						Looking for territories_elementary.northwind.samples.attributes.childmappingntongenericinferred.employees...
						Looking for territories_employees...
						Looking for territories_employees...
						Looking for territories_elementary.northwind.samples.attributes.childmappingntongenericinferred.employees...
						Looking for territories_employees...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territory_elementary.northwind.samples.attributes.childmappingntongenericinferred.employee...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territory_employee...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territory_employe...
						Looking for territory_employee...
						Looking for territory_elementary.northwind.samples.attributes.childmappingntongenericinferred.employee...
						Looking for territory_employe...
						Looking for territory_employe...
						Looking for territory_elementary.northwind.samples.attributes.childmappingntongenericinferred.employee...
						Looking for territory_employee...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territory_elementary.northwind.samples.attributes.childmappingntongenericinferred.employees...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territory_employees...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territory_employees...
						Looking for territory_employees...
						Looking for territory_elementary.northwind.samples.attributes.childmappingntongenericinferred.employees...
						Looking for territory_employees...
						Looking for territory_employees...
						Looking for territory_elementary.northwind.samples.attributes.childmappingntongenericinferred.employees...
						Looking for territory_employees...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territories_elementary.northwind.samples.attributes.childmappingntongenericinferred.employee...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territories_employee...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.territories_employe...
						Looking for territories_employee...
						Looking for territories_elementary.northwind.samples.attributes.childmappingntongenericinferred.employee...
						Looking for territories_employe...
						Looking for territories_employe...
						Looking for territories_elementary.northwind.samples.attributes.childmappingntongenericinferred.employee...
						Looking for territories_employee...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeeselementary.northwind.samples.attributes.childmappingntongenericinferred.territories...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeesterritories...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeesterritories...
						Looking for employeesterritories...
						Looking for employeeselementary.northwind.samples.attributes.childmappingntongenericinferred.territories...
						Looking for employeesterritories...
						Looking for employeesterritories...
						Looking for employeeselementary.northwind.samples.attributes.childmappingntongenericinferred.territories...
						Looking for employeesterritories...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeeelementary.northwind.samples.attributes.childmappingntongenericinferred.territory...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeeterritory...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeeterritory...
						Looking for employeeterritory...
						Looking for employeeelementary.northwind.samples.attributes.childmappingntongenericinferred.territory...
						Looking for employeeterritory...
						Looking for employeterritory...
						Looking for employeelementary.northwind.samples.attributes.childmappingntongenericinferred.territory...
						Looking for employeterritory...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeeelementary.northwind.samples.attributes.childmappingntongenericinferred.territories...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeeterritories...
						Looking for elementary.northwind.samples.attributes.childmappingntongenericinferred.employeeterritories...
						Looking for employeeterritories...
				Found match: employeeterritories
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGenericInferred.Product]
			[Elementary.Northwind.Samples.Attributes.MappingInheritance.Products]
			[Elementary.Northwind.Samples.Attributes.AliasesAndFilters.OutOfStockProduct]
		Inferring linked properties for classes...
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToOneInferred.Category]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGeneric.Supplier]
			[Elementary.Northwind.Samples.Attributes.ChildMappingNToNGeneric.Territory]
				n-n [Employees] looking for parent match...
						Looking for territory_id...
						Looking for territories_id...
						Looking for territoryid...
						Found
				n-n [Employees] looking for child match...
						Looking for employe_id...
						Looking for employees_id...
						Looking for employeid...
						Looking for employeesid...
						Looking for employeeid...
						Found
				n-n [Employees] Setting parentColumn to territories.territoryid
				n-n [Employees] Setting join table parentColumn to employeeterritories.territoryid
				n-n [Employees] Setting join table childColumn to employeeterritories.employeeid
				n-n [Employees] Setting childColumn to employees.employeeid
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToOne.Category]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGenericInferred.Supplier]
				1-n [Products] Setting parentColumn to supplierid
				1-n [Products] looking for childColumn match...
						Looking for supplier_id...
						Looking for suppliers_id...
						Looking for supplierid...
				1-n [Products] Setting childColumn to supplierid
			[Elementary.Northwind.Samples.Attributes.AliasesAndFilters.DiscontinuedProduct]
			[Elementary.Northwind.Samples.Attributes.ChildMappingNToNGenericInferred.Employee]
				n-n [Territories] looking for parent match...
						Looking for employe_id...
						Looking for employees_id...
						Looking for employeid...
						Looking for employeesid...
						Looking for employeeid...
						Found
				n-n [Territories] looking for child match...
						Looking for territory_id...
						Looking for territories_id...
						Looking for territoryid...
						Found
				n-n [Territories] Setting parentColumn to employees.employeeid
				n-n [Territories] Setting join table parentColumn to employeeterritories.employeeid
				n-n [Territories] Setting join table childColumn to employeeterritories.territoryid
				n-n [Territories] Setting childColumn to territories.territoryid
			[Elementary.Northwind.Samples.Attributes.AliasesAndFilters.DiscontinuedProductStartingWithC]
			[Elementary.Northwind.Samples.Attributes.MappingInheritance.ProductInfo]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToOneInferred.Product]
				1-1 [Category] Setting childColumn to categoryid
				1-1 [Category] looking for parentColumn match...
						Looking for category_id...
						Looking for categories_id...
						Looking for categoryid...
				1-1 [Category] Setting parentColumn to categoryid
			[Elementary.Northwind.Samples.Attributes.MappingInheritance.ProductDetail]
			[Elementary.Northwind.Samples.Attributes.ChildMappingNToNGeneric.Employee]
				n-n [Territories] looking for parent match...
						Looking for employe_id...
						Looking for employees_id...
						Looking for employeid...
						Looking for employeesid...
						Looking for employeeid...
						Found
				n-n [Territories] looking for child match...
						Looking for territory_id...
						Looking for territories_id...
						Looking for territoryid...
						Found
				n-n [Territories] Setting parentColumn to employees.employeeid
				n-n [Territories] Setting join table parentColumn to employeeterritories.employeeid
				n-n [Territories] Setting join table childColumn to employeeterritories.territoryid
				n-n [Territories] Setting childColumn to territories.territoryid
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToOne.Product]
			[Elementary.Northwind.Samples.Attributes.AliasesAndFilters.Product]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGeneric.Product]
			[Elementary.Northwind.Samples.Attributes.SimpleExample.Product]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGenericInferred.Category]
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGeneric.Category]
			[Elementary.Northwind.Samples.Attributes.ChildMappingNToNGenericInferred.Territory]
				n-n [Employees] looking for parent match...
						Looking for territory_id...
						Looking for territories_id...
						Looking for territoryid...
						Found
				n-n [Employees] looking for child match...
						Looking for employe_id...
						Looking for employees_id...
						Looking for employeid...
						Looking for employeesid...
						Looking for employeeid...
						Found
				n-n [Employees] Setting parentColumn to territories.territoryid
				n-n [Employees] Setting join table parentColumn to employeeterritories.territoryid
				n-n [Employees] Setting join table childColumn to employeeterritories.employeeid
				n-n [Employees] Setting childColumn to employees.employeeid
			[Elementary.Northwind.Samples.Attributes.ChildMappingOneToNGenericInferred.Product]
				1-1 [Category] Setting childColumn to categoryid
				1-1 [Category] looking for parentColumn match...
						Looking for category_id...
						Looking for categories_id...
						Looking for categoryid...
				1-1 [Category] Setting parentColumn to categoryid
			[Elementary.Northwind.Samples.Attributes.MappingInheritance.Products]
			[Elementary.Northwind.Samples.Attributes.AliasesAndFilters.OutOfStockProduct]
Validating references...
	Checking database references...
		Checking database native connection...
		Checking database OLEDB connection...
		Checking database schema...
		Checking class to table mappings...
Done.

You'll notice that Elementary automatically does the following: