C# 如何在linq中插入到sql

C# 如何在linq中插入到sql,c#,asp.net,linq,linq-to-sql,C#,Asp.net,Linq,Linq To Sql,我在插入时有两张表的问题。创建的表格如下所示: [Table] public class Page { ... private EntitySet<Content> _contents; [Association(Storage = "_contents", ThisKey = "Id", OtherKey = "PageId")] public EntitySet<Content> Contents { get {

我在插入时有两张表的问题。创建的表格如下所示:

[Table]
public class Page
{
    ...
    private EntitySet<Content> _contents;
    [Association(Storage = "_contents", ThisKey = "Id", OtherKey = "PageId")]
    public EntitySet<Content> Contents
    {
        get { return _contents; }
        set { _contents.Assign(value); }
    }
    ...
}
我有一个与另一个表“内容”有关系的表“页面”,因此FK“页面”位于“内容”中

当我插入一个新内容时,表“Page”上已经有了一个索引,我想把它放在“content”中,了解为什么表扫描选择“Page”正确的行。问题是,是时候对内容进行
插入提交了。它还会自动在“页面”上创建新索引


有人有什么想法吗?

是的,你需要更好地解释这一点,但如果我理解正确,你就可以创建一个进入页面内部的内容。
这里的关键是创建页面并检索其ID,然后将内容添加到该页面。

由于
页面
实体与
内容
实体有一对多的关系,因此每个页面都有很多内容,每个内容只属于一个页面,因此,页面实体必须有一个内容列表,并且内容实体必须有一个类型为
Page
的属性,该属性表示页面引用,而不是外键
PageId
,因此您不需要检索页面的id来添加新内容,如下所示:

[Table]
public class Page
{
    ...
    private EntitySet<Content> _contents;
    [Association(Storage = "_contents", ThisKey = "Id", OtherKey = "PageId")]
    public EntitySet<Content> Contents
    {
        get { return _contents; }
        set { _contents.Assign(value); }
    }
    ...
}
注意:add方法只是对实体执行
InserOnSubmit


因此,每当你想插入新内容时,你可以从页面实体附加任何页面或添加任何新页面,而不是从内容本身,你不需要检索页面id来告诉他们什么是将包含此内容的页面,只需将关系定义为对象关系,而不是外键。

事实上,是包含大量内容的页面,因此,当我插入新内容时,我需要说明将包含此内容的页面是什么,使其检索页面的id,而实际上我没有获取该id,因为当我恢复时,它会在提交更改时添加另一个页面()在我的回答中,我向你展示了我的基本想法,你应该理解它,并将其应用到你的领域中,我这样做是因为我尽可能理解它,为什么你不应该在你的问题中说,它没有那么大的不同,这是相同的想法,你应该为每个内容定义一个称为页面(页面实体的引用)的属性,因此,当您添加新内容时,只需添加对其页面的引用,就不需要检索页面id,因为您以EntitySet和EntityRef的身份进行了映射。我将为您编辑我的答案,如果还有其他问题,请随时提问。
 Page pageReference = //Get By its id or whatever
 //or
 Page pageReference = new Page { Id = 1, name = " ",....}; 
 Repository.Add( new Content{ Id = 1,...,Page = pageReference });