Меня зовут Фани, и я работаю в команде служб данных ADO.NET.
Методы ResolveName
и ResolveType
предназначены для того, чтобы помочь вам настроить информацию о типе, которую клиент записывает в полезную нагрузку, отправляемую на сервер, и способ материализации ответной полезной нагрузки с сервера.
Они помогают вам разрешать типы на клиенте и полезны во многих сценариях. Вот несколько примеров:
- Иерархия типов объектов на клиенте отличается от серверной.
- Типы сущностей, предоставляемые службой, участвуют в наследовании, и вы хотите работать с производными типами на клиенте.
ResolveName
используется для изменения имени объекта, который мы помещаем в провод при отправке запроса на сервер.
Рассмотрим эту модель данных:
На сервере
public class Employee {
public int EmployeeID {get;set;}
public string EmployeeName {get;set;}
}
public class Manager:Employee {
public List<int> employeesWhoReportToMe {get;set;}
}
Когда вы используете клиент для работы с экземплярами типа сущности Manager,
после отправки изменений на сервер мы ожидаем, что информация о типе будет присутствовать в полезной нагрузке, когда объекты участвуют в наследовании.
context.AddObject("Employees",ManagerInstance ); <-- add manager instance to the employees set.
context.SaveChanges();
Однако, когда клиент сериализует эту полезную нагрузку, он вводит "Employee" в качестве имени типа
что не то, что ожидается на сервере.
Следовательно, вы должны предоставить распознаватель имен на клиенте,
context.ResolveName = delegate(Type entityType){
//do what you have to do to resolve the type to the right type of the entity on the server
return entityType.FullName;
}
Преобразователь типов используется таким же образом.
context.ResolveType = delegate(string entitySetName){
//do what you have to do to convert the entitysetName to a type that the client understands
return Type.GetType(entitySetName);
}