如何使用Linq to SQL将对象添加到数据库?

时间:2009-09-04 07:11:14

标签: c# linq-to-sql

我正在尝试学习LINQ to SQL,我能够查询数据库并获取IQueryable并操纵我从中检索的对象。但我不知道如何将新对象添加回数据库或原始IQueryable。

private DataContext db;
private IQueryable<ActionType> action;

public void BuildQuery(string connection) {
    db = new DataContext(connection);
    action = db.GetTable<ActionType>().Select(a=>a);

    ActionType at = new ActionType();
    at.Name = "New Action Type";

    // What now? action.add(at) || db.GetTable<ActionType>.add(at); ??
}

如果你不知道正确的条款,搜索是一件令人费解的事情。而且我找不到任何完全符合我希望他们做的例子。

那么,我该如何将新对象添加到查询/数据库?

4 个答案:

答案 0 :(得分:9)

要插入新创建的“ActionType”实例,需要将对象添加到数据上下文中(并在Linq-to-SQL beta期间将“add”重命名为“InsertOnSubmit”),然后在数据上下文中调用SubmitChanges :

public void BuildQuery(string connection) {
    db = new DataContext(connection);
    action = db.GetTable<ActionType>().Select(a=>a);

    ActionType at = new ActionType();
    at.Name = "New Action Type";

    // What now? action.add(at) || db.GetTable<ActionType>.add(at); ??
    db.ActionTypes.InsertOnSubmit(at);
    db.SubmitChanges();
}

请参阅this blog post here为什么您应该使用InsertOnSubmit而不是Attach

马克

答案 1 :(得分:2)

private DataContext db;
private IQueryable<ActionType> action;

public void BuildQuery(string connection) {
   db = new DataContext(connection);
   action = db.GetTable<ActionType>().Select(a=>a);

   ActionType at = new ActionType();
   at.Name = "New Action Type";

   //There must be a table like ActionType and it seems ActionTypes when calling it ith   // db
   db.ActionTypes.InsertOnSubmit(at);
   db.SubmitChanges();
}

你可以在这里看到一个很好的例子:Click Here

答案 2 :(得分:0)

现在您需要做的就是将更改提交回数据库:

db.Attach(at);
db.SubmitChanges();

答案 3 :(得分:0)

我将DataContext包装在using语句中 - 它确保在操作完成时将其丢弃。

像这样:

public void BuildQuery(string connection) 
{
    using (var db = new DataContext(connection))
    {
        action = db.GetTable<ActionType>().Select(a=>a);

        ActionType at = new ActionType();
        at.Name = "New Action Type";

        // What now? action.add(at) || db.GetTable<ActionType>.add(at); ??
        db.ActionTypes.InsertOnSubmit(at);
        db.SubmitChanges();
    }
}