我在将数据保存到数据库时遇到了一些麻烦。基本上,我有一个主表与其他表有关联(下面的例子)。
Tbl_Listing
通常,我很容易将数据添加到数据库(使用实体框架)。但是,我不确定如何将数据添加到具有关联的字段。许多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
答案 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,您可以在这里阅读更多相关信息!