作为表格帖子的结果,我正在尝试保存新的品牌记录。在我看来,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作为第一个参数,但没有快乐。

有帮助吗?

解决方案

而不是创建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

进行处理

希望这有帮助

Alex

其他提示

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

好的,这是我提出的,而不是使用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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top