这是在linq中插入关系的正确方法吗?

时间:2009-04-23 12:44:29

标签: c# linq-to-entities

我是linq的新手,我正在尝试编写更新声明。

我有两个表,tblProject和tblPage。这两个是通过tblPage中的外键链接的。

因此,当尝试在tblPage中创建一行时,我有的查询

    public void CreatePage(int projectId, string pageName, DateTime createdDate, int createdBy, DateTime updatedDate, int updatedBy)
    {
        using (EverythingEngineEntities db = new EverythingEngineEntities())
        {
            Page page = new Page();
            page.Project = db.ProjectSet.Single(p => p.ProjectId == projectId);
            page.LastUpdatedBy = updatedBy;
            page.LastUpdatedDate = updatedDate;
            page.CreatedBy = createdBy;
            page.CreatedDate = createdDate;
            page.PageName = pageName;
        }
    }

我想知道的是通过linq向实体插入行的正确方法。

很抱歉,如果这一切都没有意义:)

编辑:

如果这条线是正确的方式,我特别感兴趣

page.Project = db.ProjectSet.Single(p => p.ProjectId == projectId);

2 个答案:

答案 0 :(得分:3)

你差不多完成了......你必须实际插入它...(你已经创建了它,这是第1步)。

代码如下:

db.Pages.InsertOnSubmit(page);
db.SubmitChanges();

我意识到那里是LINQ to SQL语法......但EF非常接近。

编辑:我很接近......对于EF而言

db.Pages.Add(page);

EDIT2:顺便说一下,如果你做的事情很简单,我忘了提到你没有 来点击服务器。我很确定你可以在EF中做这样的事情:

page.Project.ProjectID = projectID;

所以你不必下载“db.ProjectSet.Single”只是为了重新插入它。

答案 1 :(得分:0)

我认为你的方式是正确的,但你的方式会产生额外的电话。

您可以替换

page.Project = db.ProjectSet.Single(p => p.ProjectId == projectId);  


   page.ProjectReference.EntityKey = new EntityKey("EverythingEngineEntities.Project", "ProjectID", projectId);

Read this