我有两个表,一个名为Vm
,另一个名为Datastore
,两者之间的关系为一两对。 Vm
只能有一个Datastore
,但Datastore
可以有几个Vm
个。我有2个班级和基本的岗位操作。
public class Datastore
{
// Primary Key
[Key]
public string DatastoreId { get; set; }
public string Name { get; set; }
}
public class Vm
{
// Primary Key
public int Id { get; set; }
public string Name { get; set; }
public int PowerState { get; set; }
public int NumCpu { get; set; }
public int MemoryGB { get; set; }
//Foreign Key
public string DatastoreId { get; set; }
//Navigation Property
public Datastore Datastore { get; set; }
}
// POST: api/Vms
[ResponseType(typeof(Vm))]
public async Task<IHttpActionResult> PostVm(Vm vm)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Vms.Add(vm);
await db.SaveChangesAsync();
return CreatedAtRoute("DefaultApi", new { id = vm.Id }, vm);
}
问题是当我发布vm时,看起来它没有检测到外来存在。因此,它尝试在已存在此主键的表数据存储中创建外键数据记录Id。我是否必须测试密钥是否存在?如果是这样,我们配置一对二关系吗?
当我在Postman中测试post方法时,它仅在DatastoreId存在的情况下才有效
{
"DatastoreId": "datastore2",
"Name": "VM006",
"PowerState": 0,
"NumCpu": 2,
"MemoryGB": 4
}
但是当我用Postman测试postman中的post方法时,只有DatastoreId
尚不存在
{
"Datastore": {
"DatastoreId": "datastore2",
"Name": "DAL"
},
"Name": "VM006",
"PowerState": 0,
"NumCpu": 2,
"MemoryGB": 4
}
感谢您的回复!
答案 0 :(得分:0)
在保存之前,您必须找到数据存储ID的存在。
使用以下代码检查存在
Datastore = context.datastores.Single(c =&gt; c.datastoreid == @dataatoreid)