将实体关系发布到OData Web API
本文关键字:OData Web API 实体 关系 | 更新日期: 2023-09-27 18:00:51
我使用实体框架6创建了一个具有以下模型的代码优先数据库。
public class CarOwner
{
public int Id { get; set; }
public virtual ICollection<Car> Cars { get; set; }
}
public class Car
{
public int Id { get; set; }
public string Name { get; set; }
public int CarOwnerId { get; set; }
public virtual CarOwner CarOwner { get; set; }
public virtual CarImage CarImage { get; set; }
}
public class CarImage
{
public int Id { get; set; }
public int CarId { get; set; }
public byte[] Image { get; set; }
}
使用Visual Studio 2012,我自动生成了一个"Web API 2 OData Controller with actions,Using Entity Framework"。这个控制器按预期工作,我在项目的这一部分没有错误。
我想在客户端应用程序中使用服务参考来做以下事情:
var img = new CarImgage {
Image = .....
};
var car = new Car {
Name = "Ford Fiesta",
CarImage = img
};
var cars = new Collection<Car>();
cars.Add(car);
var owner = new CarOwner { Cars = cars }:
我曾尝试按照本指南添加新实体,但没有成功:http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/calling-an-odata-service-from-a-net-client
我知道将"所有者"对象发布到Web API是可能的,因为我可以使用HttpClient来完成。
如果真的有可能的话,我想知道我该怎么做。
生成服务引用后,在解决方案资源管理器中,您会发现有reference.cs(路径类似ProjectName/service References/reference.datasvcmap/reference.cs
然后在客户端,您可以使用此文件中定义的CLR对象。代码将类似于:
YourServiceContainer context = new YourServiceContainer(new Uri("yourServiceRootUri"));
var img = new CarImgage {
Image = .....
};
var car = new Car {
Name = "Ford Fiesta",
CarImage = img
};
dsc.AddToCars(car);
dsc.SaveChanges();