使用.expand的breeze EntityQuery使用BreezeQueryableAttribute将子实体显示为空白

时间:2015-10-14 20:39:35

标签: entity-framework-6 breeze

我之前从未与Breeze合作过,而且我正在努力扩展以保护我的孩子实体。

父实体(文件):

public class Document
{
    public Document()
    {
        Tags = new HashSet<Tag>();
    }
    public Int64 Id { get; set; }

    public IList<DocumentChunk> Chunks { get; set; }
    public string FilePath { get; set; }
    public string UserEmailAddress { get; set; }
    public string ResumableIdentifier { get; set; }
    public string SourceIdentifier { get; set; }
    public string P8SourceIdentifier { get; set; }
    public string FileName { get; set; }
    public string TransactionId { get; set; }
    public string TenantId { get; set; }

    public void AddTags(string tags)
    {
        var parsedTags = tags.Split(',');

        foreach (var parsedTag in parsedTags) 
        {
            var parsedKeyValueTag = parsedTag.Split(':');
            Tags.Add(new Tag { Key = parsedKeyValueTag[0], Value = parsedKeyValueTag[1] });
        }
    }

    public ICollection<Tag> Tags { get; set; }
}

儿童实体(标签):

public class Tag
{
    public Int64 Id { get; set; }
    public string Key { get; set; }
    public string Value { get; set; }
    public string TransactionId { get; set; }
    public string TenantId { get; set; }
    public string ApplicationId { get; set; }
    public Int64 DocumentId { get; set; }

    [ForeignKey("DocumentId")]
    [InverseProperty("Tags")]
    public Document Document { get; set; }
}

我阅读了Breeze Web API控制器文档: http://breeze.github.io/doc-net/webapi-controller.html 我把BreezeControllerAttribute放在我的控制器上,以便在我的Get上使用BreezeQueryableAttribute。

[BreezeController]
public class DocumentsReadController : ApiController
{
    private readonly EFContextProvider<DocsContext> _contextProvider = new EFContextProvider<DocsContext>();

    [HttpGet]
    public string Metadata()
    {
        return _contextProvider.Metadata();
    }

    [HttpGet]
    public IQueryable<Document> Documents()
    {
        var items = _contextProvider.Context.Documents.AsNoTracking();

        return items;
    }

    [HttpGet]
    public IQueryable<Tag> Tags()
    {
        var items = _contextProvider.Context.Tags.AsNoTracking();

        return items;
    }
}

客户端Javascript:

function getDocuments() {
                var manager = new breeze.EntityManager('http://localhost:50795/breeze/documentsread');
                var baseQuery = breeze.EntityQuery.from('Documents')
                    .expand('Tags');
                manager.executeQuery(baseQuery).then(function(data) {
                    $scope.documents = data.results;
                }).catch(function(error) { console.log('Query Error: ' + error)} );
            }

当我在Fiddler的电线上观看时,我的请求成功,但是当我看到JSON标签是空的时。

基于上面描述的文档链接出于好奇,我添加到Documents Get

[Queryable(AllowedFunctions = System.Web.Http.OData.Query.AllowedFunctions.All)]

我看了电线,确定有足够的标签水,但我收到了文档中描述的UI错误。

为了使用BreezeQueryableAttribute获取标签,我需要更改什么?我将继续深入阅读文档,但感谢任何帮助。

0 个答案:

没有答案