当我尝试通过lambda扩展导航属性时,如下所示:
query = query.Expand(x => x.Dealers);
Run Code Online (Sandbox Code Playgroud)
我的查询失败了

内在例外

内部异常消息:
表达式'x => x.Dealers'不是导航路径的有效表达式.lambda表达式主体中唯一支持的操作是MemberAccess和TypeAs.表达式必须至少包含一个MemberAccess,并且不能以TypeAs结尾.
然而,当我尝试通过字符串参数进行扩展时:
query = query.Expand("Dealers");
Run Code Online (Sandbox Code Playgroud)
一切似乎都正常.
我的"地区"微风客户端实体:
public class Region : BaseEntity
{
public Region();
public NavigationSet<Dealership> Dealers { get; set; }
public string Name { get; set; }
public Region Parent { get; set; }
public int? ParentId { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public int RegionId { get; set; }
public string ShortName { get; set; }
public RegionType Type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的经销商导航实体:
public …Run Code Online (Sandbox Code Playgroud) 我使用breeze谓词实现过滤器.使用BreezeJs和ASP.NET WebAPI(Breeze Server Side)和Entity Framework
谓词看起来像这样:
var predicate = breezeProvider.breeze.Predicate.create('serialNumber', '==', $scope.filter.serialNumber);
predicates.push(predicate);Run Code Online (Sandbox Code Playgroud)
当我执行查询.Breeze使用以下消息抛出异常:
检测到具有不兼容类型的二元运算符.找到操作数类型edm.string和edm.guid用于种类相等
$ scope.filter.serialNumber是一个字符串,serialNumber是一个GUID属性
网址如下.
http:// localhost:51969/breeze/WarehouseProductTransactions/GetProducts?$ filter =(StatusId ne 3d)和(WarehouseId eq 1d)和(AuthorizedADUserId eq'bTdbnW8t6Uu4D4KHCoQOhg ==')和(SerialNumber eq guid'1b9d065e-eb48-4f3d- 883C-2c841771a3e8' )&$的OrderBy =编号&$顶部= 5&$扩大=库存,AuthorizedADUser&$ inlinecount =所有页&)
请注意代码段:
(SerialNumber eq guid'1b9d065e-eb48-4f3d-883c-2c841771a3e8')
我的服务器端如下:
[EnableBreezeQuery(MaxNodeCount = 200)]
public IQueryable<WarehouseProductTransactionDetail> GetProducts()
{
return _contextProvider.Context.WarehouseProductTransactionDetails;
}
Run Code Online (Sandbox Code Playgroud)
我试图找出如何解决这种情况,但不知道.
任何帮助表示赞赏
我之前使用过RIA服务,现在正在测试Breeze Sharp.
RIA以及Breeze给人的印象是,您在服务器/中间层看到的内容就是您在客户端上看到的内容.为了支持这一点,术语Entity正在客户端和服务器上使用.它真的是一个实体,还是它真的是客户端上的表示模型或模型?
对于具有一个或两个级别实体图的较小系统,可能没有错误认为客户端和服务器是相同的.对于图表深入五到六个级别的大型系统,需要将实体转换为DTO以使其变得简单.除非UI具有一些实体的CRUD屏幕,否则大型应用程序最终会有更多的DTO和更少的实体.大多数情况下,这些DTO将代表用户界面想要的东西,并且等同于演示模型.
为什么我们不能将客户端处理的内容视为表示模型而不是实体?