Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 将数据保存到关系数据库(实体框架)_Database_Entity Framework - Fatal编程技术网

Database 将数据保存到关系数据库(实体框架)

Database 将数据保存到关系数据库(实体框架),database,entity-framework,Database,Entity Framework,我在将数据保存到数据库时遇到了一些问题。基本上,我有一个与其他表关联的主表(下面的示例) Tbl_列表 身份证 UserID-与用户表中的ID关联 CategoryID-与类别表中的ID关联 LevelID-与级别表中的ID关联 名字 地址 通常,我很容易向数据库添加数据(使用实体框架)。但是,我不知道如何将数据添加到具有关联的字段中。众多的ID字段只需要保存一个与关联表中的ID相对应的int值 比如,;当我尝试以以下方式访问列时,我得到一个“对象引用未设置为对象的实例。”错误 我使用的是N

我在将数据保存到数据库时遇到了一些问题。基本上,我有一个与其他表关联的主表(下面的示例)

Tbl_列表

  • 身份证
  • UserID-与用户表中的ID关联
  • CategoryID-与类别表中的ID关联
  • LevelID-与级别表中的ID关联
  • 名字
  • 地址
通常,我很容易向数据库添加数据(使用实体框架)。但是,我不知道如何将数据添加到具有关联的字段中。众多的ID字段只需要保存一个与关联表中的ID相对应的int值

比如,;当我尝试以以下方式访问列时,我得到一个“对象引用未设置为对象的实例。”错误

我使用的是NewListing.Tbl_User.ID而不是NewListing.UserID,因为用户ID字段无法通过intellisense使用

如果我尝试为每个相关字段创建一个对象,我会得到一个“无法定义两个对象之间的关系,因为它们附加到不同的ObjectContext对象。”错误

使用此方法,我尝试添加没有上面显示的.ID的对象-示例NewListing.User=UserObject

我知道这应该很简单,因为我只想引用主列表表中关联表的ID。任何帮助都将不胜感激

提前感谢,


-S

通常,在实体框架中,您不使用外键的ID:S,而是使用引用。设置关联表的属性而不是设置ID

在您的情况下,可能是这样的:

Listing newListing = new Listing();
newListing.Tbl_User = DBEntities.Users.Single(u=>u.ID == 1);
newListing.Tbl_Category = DBEntities.Categories.Single(c=>c.ID == 2);
...

DBEntities.AddToListingSet(newListing);
DBEntities.SaveChanges();
在EntityFramework4(随.NET4.0提供)中,您将能够使用更简单的语法,更像您所期望的那样


你可以在msdn上看到这一点,在那里你可以阅读更多关于这一点的信息

谢谢,效果很好。我不得不将Single()更改为First(),因为linqto实体显然不支持Single()。再次感谢!
Listing newListing = new Listing();
newListing.Tbl_User = DBEntities.Users.Single(u=>u.ID == 1);
newListing.Tbl_Category = DBEntities.Categories.Single(c=>c.ID == 2);
...

DBEntities.AddToListingSet(newListing);
DBEntities.SaveChanges();