我之前从未与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获取标签,我需要更改什么?我将继续深入阅读文档,但感谢任何帮助。