首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架EntityKey /外键问题

实体框架EntityKey /外键问题
EN

Stack Overflow用户
提问于 2009-06-18 08:41:45
回答 3查看 17.4K关注 0票数 7

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

我将我的链接设置如下:

代码语言:javascript
复制
gID = CInt(Request.Form("Gender"))
Brand.GenderReference.EntityKey = New EntityKey("DB_ENTITIES.Gender", "Id", gID)
TryUpdateModel(Brand)
DB.SaveChanges()

这将导致以下错误。

代码语言:javascript
复制
Entities in 'DB_ENTITIES.Brand' participate in the 'FK_Brand_Gender' relationship. 0 related 'Gender' were found. 1 'Gender' is expected.

有没有人能用简单的英语给我解释一下参数。我也尝试过将DB.Gender作为第一个参数,但没有用到joy。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-06-18 16:29:32

创建存根性别对象,而不是创建一个EntityKey对象(对不起,我不是C#的VB爱好者):

代码语言:javascript
复制
Gender g = new Gender{ID = Int32.Parse(Request.Form("Gender"))};

然后将性别附加到相应的EntitySet (从中获取性别实体的DB上的属性名称为以下字符串):

代码语言:javascript
复制
DB.AttachTo("Genders",g);

这会将数据库置于性别处于未更改状态的ObjectContext中的状态,而无需数据库查询。现在你可以按照正常的方式建立关系了

代码语言:javascript
复制
brand.Gender = g;
DB.AddToBrand(brand);
DB.SaveChanges();

这就是它的全部。不需要和EntityKeys胡闹

希望这能有所帮助

Alex

票数 18
EN

Stack Overflow用户

发布于 2009-06-18 09:37:13

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

票数 1
EN

Stack Overflow用户

发布于 2009-06-18 11:49:16

好了,这就是我想出的替代updateModel的方法。这似乎是有问题的/潜在的安全风险,因为可能会在帖子中添加额外的字段。可以通过trygetObjectByKey实例化一个新的性别实例。到目前为止,这是有效的。任何其他关于让UpdateModel更新性别属性对象的建议都将受到好评。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1011519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档