我使用的是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