我有以下代码:
public class MyPatchController : EntitySetController<Books , int>
{
protected override Books PatchEntity(int key, Delta<Books> patch)
{
var Book = db.books.FirstOrDefault(p => p.ID== key);
if (Book == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
patch.Patch(Book);
db.SaveChanges();
return Book ;
}
}
Books 实体有一个 AuthorID 外键。但是,客户端需要使用作者的姓名(而不是 ID)进行 PATCH,并将 json 发送为
{AuthorName : "Joe Smith"}
AuthorName 不在 Book 的模型中。
我想要做的是使用 linq 来查找 authorID,但是 Odata 不会让我在修补时混合和匹配模型。
有没有办法让这个工作?
请注意,我尝试在模型中使用导航,但无济于事
编辑:$元数据:
<edmx:Edmx xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx" Version="1.0">
<edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="3.0" m:MaxDataServiceVersion="3.0">
<Schema xmlns="http://schemas.microsoft.com/ado/2009/11/edm" Namespace="Store.Models">
<EntityType Name="BOOK">
<Key>
<PropertyRef Name="BOOK_ID"/>
</Key>
<Property Name="BOOK_ID" Type="Edm.Int32" Nullable="false"/>
<Property Name="BOOK_NAME" Type="Edm.String"/>
<Property Name="AUTHOR_ID" Type="Edm.Int32"/>
</EntityType>
<EntityType Name="AUTHOR">
<Key>
<PropertyRef Name="AUTHOR_ID"/>
</Key>
<Property Name="AUTHOR_ID" Type="Edm.Int32" Nullable="false"/>
<Property Name="AUTHOR_NAME" Type="Edm.String"/>
</EntityType>
</Schema>
<Schema xmlns="http://schemas.microsoft.com/ado/2009/11/edm" Namespace="Default">
<EntityContainer Name="Container" m:IsDefaultEntityContainer="true">
<EntitySet Name="Author" EntityType="Store.Models.Author"/>
<EntitySet Name="Book" EntityType="Store.Models.Book"/>
</EntityContainer>
</Schema>
</edmx:DataServices>
</edmx:Edmx>