我确信有一种简单的方法可以做到这一点,但我只是不知道它。
我有一个angularJs客户端应用程序(在服务器上使用.net webapi和实体框架),它使用具有父/子关系的对象。这些对象可以在我的angularJs应用程序中创建,并在客户端上具有null
的id属性。当我将对象发送到web api时,将填充该id。
例如,我可以将其发送到我的服务器
main: {
name: 'jim',
children: [
{ id: null, name: 'dave' },
{ id: null, name: 'bob' }
]
}
这适用于父/子关系。在我的服务器上,这将创建如下的c#模型,并使用AutoMapper,我可以设置子项引用其父对象。
public MainModel {
public string Name { get; set; }
public ICollection<ChildModel> Children { get; set; }
}
public ChildModel {
public long Id { get; set; }
public string Name { get; set; }
}
我的autoMapper文件会说出类似这样的内容
Mapper.CreateMap<Main, MainModel>();
Mapper.CreateMap<MainModel, Main>()
.AfterMap((s, d) => {
foreach (var item in d.Children)
item.Main = d;
});
Mapper.CreateMap<Child, ChildModel>().ReverseMap();
但是,如果我引入另一个对象,那不在子集合中,我的代码就会变得混乱,因为多个对象的id = 0。例如
main: {
name: 'jim',
children: [
{ id: 0, name: 'dave' },
{ id: 0, name: 'bob' }
],
bestChildId: 0 // which child is this pointing too?
}
正如你所看到的,bestChildId,没有引用子对象,但因为它们的id都是0,所以它不知道哪一个。
最好的方法是什么?是否有一个框架,我应该使用角度来克服这个?或者我必须在客户端上实现引用,并将其全部链接到服务器上。像这样的东西
main: {
name: 'jim',
children: [
{ id: 0, name: 'dave' },
{ id: 0, name: 'bob' }
],
bestChildId: 0, // this could point to an id, and will be downloaded from server upon fetch
bestChild: { // use this property on the client, only when id equals 0
id: 0, name: 'dave'
}
}