2010-02-19 147 views
-1

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

Tbl_Listing

  • ID
  • 用户ID - 相联系的ID在用户表
  • 类别ID - 相联系的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.UserID NewListing.Tbl_User.ID因为用户ID字段不是可以通过智能感知。

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

使用这种方法,我想添加没有上面显示的.ID的对象 - 例如NewListing.User = UserObject。

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

由于提前,

-S

回答

2

一般来说,实体框架,你不使用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(); 

在实体框架4(与.NET 4.0推出),你就可以使用一个简单的语法更喜欢你所期望的。

你可以在msdn上看到这个article,在这里你可以阅读更多关于这个!

+0

谢谢,这很好。我必须将Single()更改为First(),因为Single()显然不受Linq To Entities支持。再次感谢! – sheefy 2010-02-20 12:15:48