using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DomainModel = DevLeap.Linq.Architecture.NTier.DomainModel;
namespace DevLeap.Linq.Architecture.NTier.DataLayer.LinqToSql {
public class CustomerDal :
BaseDal<DomainModel.Customer, List< DomainModel.Customer>, String>

// ... Kd vynechn ...

public override DomainModel.Customer Read(string key) {

// Naten prvn instance entity zkaznka z LINQ to SQL 
// pomoc zadanho kle
var linqCustomer = this.Northwind.Customers
	.First(c => c.CustomerID == key);

// Pevod na zkaznka v domnovm modelu
var result = new DomainModel.Customer {
CustomerID = linqCustomer.CustomerID,
Address = linqCustomer.Address,
City = linqCustomer.City,
CompanyName = linqCustomer.CompanyName,
ContactName = linqCustomer.ContactName,
ContactTitle = linqCustomer.ContactTitle,
Country = linqCustomer.Country,
Fax = linqCustomer.Fax,
Phone = linqCustomer.Phone,
PostalCode = linqCustomer.PostalCode,
Region = linqCustomer.Region
};

result.Orders = new List<DomainModel.Order>();

// Pevd vechny objednvky zskan z LINQ to SQL
// na objednvku v domnovm modelu.
foreach (var o in linqCustomer.Orders) {
result.Orders.Add(new DomainModel.Order {
OrderID = o.OrderID,
CustomerID = o.CustomerID,
EmployeeID = o.EmployeeID,
Freight = o.Freight,
OrderDate = o.OrderDate,
RequiredDate = o.RequiredDate,
ShipAddress = o.ShipAddress,
ShipCity = o.ShipCity,
ShipCountry = o.ShipCountry,
ShipName = o.ShipName,
ShippedDate = o.ShippedDate,
ShipPostalCode = o.ShipPostalCode,
ShipRegion = o.ShipRegion,
ShipVia = o.ShipVia
});
}
return (result);
}

// ... Kd vynechn ...

}
}
