实体框架EntityKey /外键问题

Squ*_*gs. 7 entity entity-framework foreign-keys entitykey

作为表格的结果,我正在尝试保存新的品牌记录.在我看来,Gender是一个下拉列表,返回一个Integer,它是从ViewData填充的("性别")

我按如下方式设置了我的链接:

gID = CInt(Request.Form("Gender"))
Brand.GenderReference.EntityKey = New EntityKey("DB_ENTITIES.Gender", "Id", gID)
TryUpdateModel(Brand)
DB.SaveChanges()
Run Code Online (Sandbox Code Playgroud)

这导致以下错误.

Entities in 'DB_ENTITIES.Brand' participate in the 'FK_Brand_Gender' relationship. 0 related 'Gender' were found. 1 'Gender' is expected.
Run Code Online (Sandbox Code Playgroud)

有人可以用简单的英语向我解释参数.我也尝试过DB.Gender作为第一个参数,但没有快乐.

Ale*_*mes 18

而不是创建一个EntityKey创建一个存根性别对象(抱歉,我不是一个VB人,所以在C#中):

Gender g = new Gender{ID = Int32.Parse(Request.Form("Gender"))};
Run Code Online (Sandbox Code Playgroud)

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

DB.AttachTo("Genders",g);
Run Code Online (Sandbox Code Playgroud)

这使数据库处于Gender ObjectContext处于未更改状态而没有数据库查询的状态.现在您可以按照正常情况建立关系

brand.Gender = g;
DB.AddToBrand(brand);
DB.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

这就是它的全部.不需要捣乱EntityKeys

希望这可以帮助

亚历克斯

  • 在将某些内容附加到上下文之前,您应该使用LINQ to Objects检查ObjectStateManager以检查是否已存在相同的对象. (2认同)