作为表单发布的结果,我正在尝试保存新的品牌记录。在我看来,性别是一个下拉列表,返回一个整数,它由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作为第一个参数,但没有用到joy。
发布于 2009-06-18 16:29:32
创建存根性别对象,而不是创建一个EntityKey对象(对不起,我不是C#的VB爱好者):
Gender g = new Gender{ID = Int32.Parse(Request.Form("Gender"))};然后将性别附加到相应的EntitySet (从中获取性别实体的DB上的属性名称为以下字符串):
DB.AttachTo("Genders",g);这会将数据库置于性别处于未更改状态的ObjectContext中的状态,而无需数据库查询。现在你可以按照正常的方式建立关系了
brand.Gender = g;
DB.AddToBrand(brand);
DB.SaveChanges();这就是它的全部。不需要和EntityKeys胡闹
希望这能有所帮助
Alex
发布于 2009-06-18 09:37:13
您需要的是一个品牌和性别的实例,然后将Brand.Gender设置为性别的实例。然后你就可以毫无问题地保存了。
发布于 2009-06-18 11:49:16
好了,这就是我想出的替代updateModel的方法。这似乎是有问题的/潜在的安全风险,因为可能会在帖子中添加额外的字段。可以通过trygetObjectByKey实例化一个新的性别实例。到目前为止,这是有效的。任何其他关于让UpdateModel更新性别属性对象的建议都将受到好评。
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 Ifhttps://stackoverflow.com/questions/1011519
复制相似问题