ODATAController多级序列化



我使用的是Odata控制器。关于我想要的siteUsers和siteUser.Login的响应进行序列化。目前只有顶级的siteUsers正在序列化。最好的方法是什么?

命名空间SOW.Controllers{

public class SiteUsersController : ODataController
{

    // POST: odata/SiteUsers
    public IHttpActionResult Post(SiteUser siteUser)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }
        db.SiteUsers.Add(siteUser);
        db.SaveChanges();
        return Created(siteUser);
    }

}

public partial class SiteUser
{
    public int SiteUsersId { get; set; }
    public int SiteId { get; set; }
    public int LoginId { get; set; }
    public string CreatedBy { get; set; }
    public Nullable<System.DateTime> CreateDate { get; set; }
    public string UpdatedBy { get; set; }
    public Nullable<System.DateTime> UpdatedDate { get; set; }
    public virtual Login Login { get; set; }
    public virtual Site Site { get; set; }
}


 public partial class Login
    {
        public Login()
        {
            this.SiteUsers = new HashSet<SiteUser>();
            this.SOWTransactions = new HashSet<SOWTransaction>();
        }
        public int LoginId { get; set; }
        public string UserName { get; set; }
        public string DisplayName { get; set; }
        public string eMail { get; set; }
        public Nullable<bool> active { get; set; }
        public Nullable<System.DateTime> LastLogon { get; set; }
        public virtual ICollection<SiteUser> SiteUsers { get; set; }
        public virtual ICollection<SOWTransaction> SOWTransactions { get; set; }
    }

Login未显示的原因是它的实体类型与SiteUser不同,因此在SiteUser类中具有Login类型属性将使其成为SiteUser实体的导航属性。

为了让服务在请求SiteUsers的响应中返回Login,您需要确保在SiteUsersController 中的Get操作上具有[EnableQuery]属性

[EnableQuery]
public IQueryable<SiteUser> Get()
{
    return db.SiteUsers;
}

并将这样的请求发送到服务

GET http://host/service/odata/SiteUsers?$expand=Login

相关内容

  • 没有找到相关文章

最新更新