何时使用TableController <t>以及何时使用Custom DomainManager

时间:2016-02-03 22:04:36

标签: c# azure asp.net-web-api2 azure-mobile-services

我想知道什么时候有一个自定义域管理器是有意义的。最初,每当我们在T中有一个非TableController<T>类型的返回类型时,我就会强制要求创建一个新的自定义DomainManager。

但是,在示例应用Sport by Xamarin中,他们的控制器继承自TableController<Athlete>,但他们的GET方法返回IQueryable<AthleteDto>

public IQueryable<AthleteDto> GetAllAthletes()
{
     return ...;
}

注意:AthleteDto确实继承自EntityData

如果允许,那么为什么我会遇到创建新DomainManager的麻烦?

如果我的返回值没有从EntityData继承,我只需要创建一个新的DomainManager吗?

1 个答案:

答案 0 :(得分:1)

您应该为要连接的每种数据源创建一个新的DomainManager。例如,Azure Table Storage有一个内置的域管理器,使用Entity Framework有一个用于SQL Azure的域管理器。

您的数据类型需要从EntityData继承或实施接口ITableData才能使用TableController<T>。这与域管理员问题无关。

对于您引用的示例,允许在域管理器和控制器方法的返回类型之间使用不同的类型,但它可以使代码更复杂。这是因为基类方法将返回DTO类型,您现在必须转换为其他类型。请注意,该示例中的AthleteAthleteDto类型都继承自EntityData,因为它们都具有超类AthleteBase