Для чтения: это не проблема. Запрос может проецироваться в произвольные типы, и LinqToSql сопоставит имена свойств с результатами столбцов.
from c in dc.Customer
where c.Address.StreetName.StartsWith("AB")
select new Person() {Name = c.Name};
A (такой запрос, как приведенный выше) разрешается при перечислении следующих операций:
- sql производится
DataContext.ExecuteQuery<Person>()
вызывается с этой строкой sql и параметрами documentmetation
- sql отправляется в базу данных, и читатель возвращается.
- Читатель данных передается в
DataContext.Translate<Person>()
Документация .
В случае этого запроса - выбирается только столбец Customer.Name, и ни один экземпляр Customer не был обновлен. Также обратите внимание: если у вас есть устройство чтения данных, вы можете позвонить DataContext.Translate<T>
самостоятельно.
Если вы хотите добавить свойство, которое работает как запрашиваемая таблица одного типа, сделайте это в вашем частичном файле DataContext:
public IQueryable<CustomType> CustomTypeTable
{
get
{
var query = this.Type1Table.Select(t1 => new CustomType{f1 = t1.f1 ... })
.Concat( this.Type2Table.Select(t2 => new CustomType{f1 => t2.f1 ... })
return query
}
}
Для записи ... ObjectTracking в DataContext по типу и PrimaryKey. Тип каждого экземпляра необходим (однозначно) для сопоставления с таблицей в базе данных. Таким образом, в этих сценариях нельзя использовать карту типа 1 для двух таблиц.