0
我试图添加从实体数据模型类创建的对象。我有一个名为Users的表格,它已经变成了一个User EDM类。而且我还有一个Pages页面,它已经成为一个Page EDM类。这些表具有外键关系,因此每个页面都与许多用户关联。现在我想能够添加一个页面,但我无法得到如何去做。我在下面的用户处得到一个null参考异常。我仍然很困惑这一切,所以我敢肯定这是一个简单的错误,但我不知道该怎么做。实体框架中的外键关系
另外,顺便说一下,编译器要求我在对象初始值设定项中设置PageID,即使此字段在表中设置为自动ID。我是否正确地将它设置为0,期望它在保存时自动更新在表格中,或者我应该怎么做?
任何帮助表示赞赏!
问题的方法:
private Page GetPage(User currentUser)
{
string url = _request.ServerVariables["url"].ToLower();
var userPages = from p in _context.PageSet
where p.Users.UserID == currentUser.UserID
select p;
var existingPage = userPages.FirstOrDefault(e => e.Url == url);
if (existingPage != null)
return existingPage;
Page page = new Page()
{
Count = 0,
Url = _request.ServerVariables["url"].ToLower(),
PageID = 0, //Only initial value, changed later?
};
_context.AddToPageSet(page);
page.Users.UserID = currentUser.UserID; //Here's the problem...
return page;
}
谢谢,但不幸的是它不起作用...首先,您的表达式试图将一个User对象分配给一个int(UserID)。所以我改为page.Users.UserID = _context.UserSet.First(u => u.UserID == currentUser.UserID).UserID;但那也行不通。仍然在page.Users.UserID的用户部分nullreference。我试图添加一个新的页面行,然后将该新页面上的外键UserID设置为当前User对象的UserID(主键)。我在这里错过了什么吗?很明显,新页面的Users集合是空的,但是我需要做些什么来添加它呢? – Anders 2010-05-24 13:41:10
对不起,复制/粘贴错误。固定。根据你上面的代码,'Users'看起来像一个'User',而不是一个集合。 – 2010-05-24 14:13:16
你说得对,它不是一个集合。但为什么它会被称为用户然后...?但是,这工作!我进一步调查了一下,例如这里建议不要这样做:http://www.codewrecks.com/blog/index.php/2009/02/18/entity-framework-relations-and-entitykey/(显然是由于开销)。但是替代代码真的太复杂了,所以我宁愿随你的建议去。任何承担这一点? (我使用EF 3.5 btw,在这方面是4.0不同的?)。谢谢你的帮助! – Anders 2010-05-24 14:47:30