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

时间:2010-02-19 09:41:24

标签: database entity-framework

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

Tbl_Listing

  • ID
  • UserID - 与用户表中的ID相关联
  • CategoryID - 与类别表中的ID相关联
  • LevelID - 与级别表中的ID相关联。
  • 名称
  • 地址

通常,我很容易将数据添加到数据库(使用实体框架)。但是,我不确定如何将数据添加到具有关联的字段。许多ID字段只需要保存与关联表中的ID相对应的int值。

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

Listing NewListing = new Listing();
NewListing.Tbl_User.ID = 1;
NewListing.Tbl_Category.ID = 2;
...

DBEntities.AddToListingSet(NewListing);
DBEntities.SaveChanges();

我使用NewListing.Tbl_User.ID而不是NewListing.UserID,因为Intellisense无法使用UserID字段。

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

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

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

提前致谢,

-S

1 个答案:

答案 0 :(得分:2)

通常,使用Entity Framework,您不使用外键的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();

在Entity Framework 4(随.NET 4.0推出)中,您将能够使用更符合预期的更简单的语法。

您可以在msdn上查看这个article,您可以在这里阅读更多相关信息!