Сначала я использую код Entity Framework 4.1 и ASP.NET MVC 3. На мой взгляд, у меня есть данные пользовательского интерфейса Yahoo (YUI). Я получаю данные (для заполнения сетки через JSON).
Поток получения данных:
Controller -> Service -> Repository
Моя настройка контекста:
public DbSet<Category> Categories { get; set; }
Оригинальный репозиторий:
public IEnumerable<Category> GetAll()
{
return db.Categories.ToList();
}
Вызов этого метода хранилища из моего сервисного уровня:
public IEnumerable<Category> GetAll()
{
return categoryRepository.GetAll();
}
Мой метод действия для извлечения данных и передачи их в таблицу данных YUI:
public ActionResult JsonCategoriesList()
{
JsonEncapsulatorDto<Category> data = new JsonEncapsulatorDto<Category>
{
DataResultSet = categoryService.GetAll()
};
return Json(data, JsonRequestBehavior.AllowGet);
}
JsonEncapsulatorDto code:
public class JsonEncapsulatorDto<T>
{
public IEnumerable<T> DataResultSet { get; set; }
}
Когда я использую его таким образом, в таблице данных возникает ошибка. Я не знаю, как просмотреть ошибку. Ничего не отображается Я отладил и увидел, что в DataResultSet есть счетчик 7. Поэтому я изменил репозиторий, чтобы использовать некоторые тестовые данные, и тогда это сработало. В чем разница, и как я могу получить его для отображения моих результатов?
Репозиторий с тестовыми данными:
public IEnumerable<Category> GetAll()
{
List<Category> list = new List<Category>();
list.Add(new Category { Name = "Brendan" });
list.Add(new Category { Name = "Charlene" });
return list;
//return db.Categories.ToList();
}
Не уверен, что вы, ребята, хотите увидеть мою настройку категорий с данными:
<div id="dtCategories"></div>
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function () {
var yuiDataSource = YAHOO.util.DataSource;
var yuiPaginator = YAHOO.widget.Paginator;
var yuiDataTable = YAHOO.widget.DataTable;
var dtCategoriesColumnDefs, dtCategoriesDataSource;
var dtCategoriesConfigs, dtCategoriesDataTable;
dtCategoriesColumnDefs = [
{ key: 'Name', label: 'Name' }
];
dtCategoriesDataSource = new YAHOO.util.DataSource('@Url.RouteUrl (Url.AdministrationCategoryJsonCategoriesList())');
dtCategoriesDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
dtCategoriesDataSource.responseSchema = {
resultsList: 'DataResultSet',
fields: [
{ key: 'Name' }
]
};
dtCategoriesDataTable = new YAHOO.widget.DataTable('dtCategories', dtCategoriesColumnDefs, dtCategoriesDataSource);
});
</script>
UPDATE:
Категория категории:
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string MetaKeywords { get; set; }
public string MetaDescription { get; set; }
public bool IsActive { get; set; }
public int? ParentCategoryId { get; set; }
public virtual Category ParentCategory { get; set; }
public virtual ICollection<Category> ChildCategories { get; set; }
}
Класс контекста:
public class PbeContext : DbContext
{
public DbSet<Category> Categories { get; set; }
public DbSet<Tutorial> Tutorials { get; set; }
protected override void OnModelCreating(DbModelBuilder dbModelBuilder)
{
dbModelBuilder.Entity<Category>()
.HasOptional(c => c.ParentCategory)
.WithMany(c => c.ChildCategories)
.HasForeignKey(p => p.ParentCategoryId);
}
}
ОБНОВЛЕНИЕ 2:
У меня есть другое представление, что он получает список объектов Product (без циклических ссылок) и заполняется нормально. Я отладил, чтобы посмотреть, как выглядят данные, когда они возвращаются И вот как объекты выглядели в списке:
Категория:
[0] [System.Data.Entity.DynamicProxies.Category_9E42BCEDDE8AA695F718BEBE2224E1D34291FCAF82F801F4995EEB8449479C93]
[1] [System.Data.Entity.DynamicProxies.Category_9E42BCEDDE8AA695F718BEBE2224E1D34291FCAF82F801F4995EEB8449479C93]
[2] [System.Data.Entity.DynamicProxies.Category_9E42BCEDDE8AA695F718BEBE2224E1D34291FCAF82F801F4995EEB8449479C93]
... и так далее ...
Продукты:
[0] = {MyProject.Core.DomainObjects.Product}
[1] = {MyProject.Core.DomainObjects.Product}
[2] = {MyProject.Core.DomainObjects.Product}
Может это из-за того, как данные возвращаются ??