7

作为表单发布的结果,我正在尝试保存新的品牌记录。在我看来,Gender 是一个下拉列表,返回一个 Integer,它由 ViewData("gender") 填充

我的链接设置如下:

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 作为第一个参数,但没有任何乐趣。

4

3 回答 3

18

而不是创建一个 EntityKey 创建一个存根 Gender 对象(对不起,我不是 C# 中的 VB 人):

Gender g = new Gender{ID = Int32.Parse(Request.Form("Gender"))};

然后将 Gender 附加到适当的位置(您从中获取 Gender 实体EntitySet的属性名称是下面的字符串):DB

DB.AttachTo("Genders",g);

这会将数据库置于 GenderObjectContext处于未更改状态的状态,而无需进行数据库查询。现在你可以正常建立关系了

brand.Gender = g;
DB.AddToBrand(brand);
DB.SaveChanges();

这就是它的全部。没必要乱搞EntityKeys

希望这可以帮助

亚历克斯

于 2009-06-18T16:29:32.477 回答
1

您需要的是 Brand 和 Gender 的实例,然后将 Brand.Gender 设置为 Gender 的实例。然后你可以毫无问题地保存。

于 2009-06-18T09:37:12.500 回答
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
于 2009-06-18T11:49:15.620 回答