将LLBLGen模型类转换为View模型对象?

用户名

我认为标题的措词不正确。我试图返回结果以填充视图。我在浏览器控制台中收到的错误消息是“序列化类型为对象的对象时检测到循环引用”,所有文档都说要展平对象并排除与模型无关的属性。创建一个匿名类型是一种变通方法,似乎可以解决某些问题。我都不能上班。如果我尝试类似的东西

var Results = from RS in results
                      select new
                      {
                          BundleId = RS.BundleId
                      };

intellisense确实可以接受。有什么建议?

控制器

{
public class BundleStatusController : Controller
{


    public ActionResult BundleStatus()
    {
        return View();

    }

    [HttpPost]
    public ActionResult BundleStatusRead([DataSourceRequest] DataSourceRequest request)
    {

            var span = DateTime.Today.AddDays(-1);
            DataAccessAdapter adapter = new DataAccessAdapter();
            EntityCollection allBundles = new EntityCollection(new CarrierBundleEntityFactory());
            RelationPredicateBucket filter = new RelationPredicateBucket(CarrierBundleFields.Date <= span);
            adapter.FetchEntityCollection(allBundles, filter);
            var results = allBundles;

            return Json(results.ToDataSourceResult(request));
        }

}

}

看法

  @{
ViewBag.Title = "BundleStatusGet";
 }

 <div>
@(Html.Kendo().Grid<ZoomAudits.DAL.EntityClasses.CarrierBundleEntity>()
    .Name("grid")
    .Columns(columns =>
    {
        columns.Bound(c => c.BundleId).Width(140);
        columns.Bound(c => c.CarrierId).Width(190);
        columns.Bound(c => c.Date);
        columns.Bound(c => c.IsSent).Width(110);
    })
    .HtmlAttributes(new { style = "height: 380px;" })
    .Scrollable()
    .Groupable()
    .Sortable()
    .Pageable(pageable => pageable
        .Refresh(true)
        .PageSizes(true)
        .ButtonCount(5))
                .Selectable(selectable => selectable
                .Mode(GridSelectionMode.Multiple)
                .Type(GridSelectionType.Cell))
            //.Events(events => events.Change("onChange").Sync("sync_handler")))
    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(read => read.Action("BundleStatusRead", "BundleStatus"))
                //.Update(update => update.Action("EditingInline_Update", "Grid"))
    )
)

更新的控制器

[HttpPost]
    public ActionResult BundleStatusRead([DataSourceRequest] DataSourceRequest request)
    {

        var span = DateTime.Today.AddDays(-1);
        DataAccessAdapter adapter = new DataAccessAdapter();
        EntityCollection allBundles = new EntityCollection(new CarrierBundleEntityFactory());
        RelationPredicateBucket filter = new RelationPredicateBucket(CarrierBundleFields.Date <= span);
        adapter.FetchEntityCollection(allBundles, filter);


        //...Using AutoMapper
        **Mapper**.CreateMap<UtilityWebSite.Models.CarrierBundleModel, ZoomAudits.DAL.EntityClasses.CarrierBundleEntity>();
        List<UtilityWebSite.Models.CarrierBundleModel> viewModelList = Mapper.Map<List<ZoomAudits.DAL.EntityClasses.CarrierBundleEntity>, List<UtilityWebSite.Models.CarrierBundleModel>>(allBundles);
        return Json(viewModelList.ToDataSourceResult(request));

        //...Not using AutoMapper
        List<UtilityWebSite.Models.CarrierBundleModel> viewBundles = new List<UtilityWebSite.Models.CarrierBundleModel>();
        foreach (ZoomAudits.DAL.EntityClasses.CarrierBundleEntity entityBundle in **EntityCollection**)
        {
            UtilityWebSite.Models.CarrierBundleModel model = new UtilityWebSite.Models.CarrierBundleModel();
            model.BundleID = entityBundle.BundleId;
            model.CarrierId = entityBundle.CarrierId;
            viewBundles.Add(model);
        }
        return Json(viewBundles.ToDataSourceResult(request));

    }
罗斯·布什

您面临的一个问题是您的数据实体对象需要与模型对象分开。最初,这似乎比需要的工作还要多,但是随着应用程序的增长,您将看到复制类的好处。这就是我的解决方法。

在您的LLBLGEN域类中

namespace ZoomAudits.DAL.EntityClasses
{
    public class CarrierBundleEntity
    {
       //....Whatever is generated as your Bundle object from the DB
    }
}

在您的模型MVC文件夹中

namespace MyProjectNamespace.Models
{
    public class CarrierBundleModel
    {
        [Required]
        [Display(Name = "Bundle ID")]
        public int BundleID{get;set;}

        [Required]
        [Display(Name = "Bundle Name")]
        public int BundleName{get;set;}

        //...Other properties you will use in the UI That match the LLBLGen Bundle class  
    }
}

在您的控制器动作中

[HttpPost]
public ActionResult BundleStatusRead([DataSourceRequest] DataSourceRequest request)
{                   

        var span = DateTime.Today.AddDays(-1);
        DataAccessAdapter adapter = new DataAccessAdapter();
        EntityCollection allBundles = new EntityCollection(new CarrierBundleEntityFactory());
        RelationPredicateBucket filter = new RelationPredicateBucket(CarrierBundleFields.Date <= span);
        adapter.FetchEntityCollection(allBundles, filter);


        //...Using AutoMapper
        Mapper.CreateMap<MyProjectNamespace.Models.CarrierBundleModel, ZoomAudits.DAL.EntityClasses.CarrierBundleEntity>();   
        List<MyProjectNamespace.Models.CarrierBundleModel> viewModelList =Mapper.Map<List<ZoomAudits.DAL.EntityClasses.CarrierBundleEntity>, List<MyProjectNamespace.Models.CarrierBundleModel>>(allBundles);
        return Json(viewModelList.ToDataSourceResult(request));

        //...Not using AutoMapper
        List<MyProjectNamespace.Models.CarrierBundleModel> viewBundles=new List<MyProjectNamespace.Models.CarrierBundleModel>();
        foreach(ZoomAudits.DAL.EntityClasses.CarrierBundleEntity entityBundle in allBundles)
        {
            MyProjectNamespace.Models.CarrierBundleModel model=new MyProjectNamespace.Models.CarrierBundleModel();
            model.BundleID=entityBundle.BundleId;
            model.CarrierId=entityBundle.CarrierId;
            viewBundles.Add(model);
        }
        return Json(viewBundles.ToDataSourceResult(request));

}

在您看来

@(Html.Kendo().Grid<MyProject.Models.CarrierBundleModel>()

注意:我使用AutoMapper,这是一个很棒的映射库,您可以将其添加到项目中,并且如果模型与实体数据类型和名称之间存在一对一的匹配,则无需编写翻译。还有其他可用的映射工具。我只是为了向您展示从DAL实体转换为Model的替代快捷方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将模型类转换为ReactiveMongo BSONDocument

来自分类Dev

将Django模型转换为普通对象

来自分类Dev

将字典转换为对象模型

来自分类Dev

骨干:将模型转换为不同模型类的最佳方法

来自分类Dev

骨干:将模型转换为不同模型类的最佳方法

来自分类Dev

将Jags模型转换为stan模型

来自分类Dev

将模型转换为其基本模型

来自分类Dev

如何将数据行转换为通用模型类?

来自分类Dev

无法将类模型属性转换为在 .net 中列出

来自分类Dev

将linq转换为模型类失败“无法转换类型'System.Data.Entity.Infrastructure.DbQuery`1的对象”

来自分类Dev

将JSON对象列表转换为Django模型实例

来自分类Dev

将JSON对象转换为Ember数据模型

来自分类Dev

Scala Play 2-将JsValue转换为模型对象

来自分类Dev

Scala Play 2-将JsValue转换为模型对象

来自分类Dev

Rails将数组项转换为对象模型

来自分类Dev

将模型转换为ViewModel

来自分类Dev

C#从对象转换为模型类型

来自分类Dev

将对象模型转换为XML

来自分类Dev

将ruby rails模型类转换为lib文件夹中的类

来自分类Dev

GAE:将模型转换为多模型的子类

来自分类Dev

CoreML模型:将imageType模型输入转换为multiArray

来自分类Dev

我可以将模型数组转换为模型集合吗?

来自分类Dev

DBFlow(无法将模型强制转换为模型)

来自分类Dev

将视图模型数据转换为json

来自分类Dev

将语言文本转换为模型

来自分类Dev

将HTK模型转换为Pocketsphinx

来自分类Dev

django将模型实例转换为dict

来自分类Dev

将Keras模型转换为C ++

来自分类Dev

将tflearn模型转换为keras