将实体关系发布到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来完成。

如果真的有可能的话,我想知道我该怎么做。

将实体关系发布到OData Web API

生成服务引用后,在解决方案资源管理器中,您会发现有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();