作为表格帖子的结果,我正在尝试保存新的品牌记录。在我看来,Gender是一个下拉列表,返回一个Integer,它是从ViewData填充的(“性别”)
我按以下方式设置了我的链接:
gID = CInt(Request.Form("Gender"))
Brand.GenderReference.EntityKey = New EntityKey("DB_ENTITIES.Gender", "Id", gID)
TryUpdateModel(Brand)
DB.SaveChanges()
导致以下错误。
Entities in 'DB_ENTITIES.Brand' participate in the 'FK_Brand_Gender' relationship. 0 related 'Gender' were found. 1 'Gender' is expected.
有人可以用简单的英语向我解释参数。我也尝试过DB.Gender作为第一个参数,但没有快乐。
答案 0 :(得分:18)
而不是创建EntityKey创建存根性别对象 (抱歉,我不是一个VB人,所以在C#中):
Gender g = new Gender{ID = Int32.Parse(Request.Form("Gender"))};
然后将性别附加到相应的EntitySet
(DB
上的属性名称,您获得的性别实体来自下面的字符串):
DB.AttachTo("Genders",g);
这使得数据库处于ObjectContext
中的Gender处于未更改状态而没有数据库查询的状态。现在你可以按照正常的方式建立一种关系
brand.Gender = g;
DB.AddToBrand(brand);
DB.SaveChanges();
这就是它的全部。无需使用EntityKeys
希望这有帮助
答案 1 :(得分:1)
您需要的是品牌和性别的实例,然后将Brand.Gender设置为Gender的实例。然后你可以毫无问题地保存。
答案 2 :(得分:0)
好的,这是我提出的,而不是使用updateModel。无论如何,在帖子中添加可能的附加字段似乎存在问题/潜在的安全风险。可以通过trygetObjectByKey实例化一个新的Gender实例。到目前为止这是有效的。有关获取UpdateModel以更新Gender属性对象的任何其他建议,请参阅。
Dim cID As Integer
cID = CInt(Request.Form("Gender"))
Dim key As New EntityKey(DB.DefaultContainerName() & ".Gender", "ID", cID)
Dim objGenderDS As New Gender
'Bring back the Gender object.
If DB.TryGetObjectByKey(key, objGenderDS) Then
Brand.GenderReference.EntityKey = key
Brand.Gender = objGenderDS
DB.AddToBrand(Brand)
DB.SaveChanges()
Else
End If