如何使用Linq to SQL在db中添加记录?

时间:2011-04-12 18:10:52

标签: c# .net linq linq-to-sql c#-3.0

我正在学习Linq to SQL,并且从一个例子中我通过传递自定义类型对象在db中添加了一条记录。例如,在用户表中添加新用户我做了:

db.Users.InsertOnSubmit(newUser);
db.SubmitChanges();

我无法理解Linq如何知道应该在哪个列中添加哪个属性值?

有没有更好的方法可以使用Linq在db中添加新记录?

如果我不使用自定义类型(DTO),还请提及我可以添加的内容吗?

非常感谢您宝贵的时间和分享。

1 个答案:

答案 0 :(得分:4)

您的DBML文件说明了所有对象的属性如何映射到您的DBMS。您添加到DBML的数据库表/视图会导致为您创建相应的类 - 就像您的Users类一样 - 其属性使用属性进行修饰,告诉L2S如何处理所有ORM映射

在您的DBML文件下应该是显示此内容的[whatever] .designer.cs文件。以下是它应该是什么样子的样本:

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Invoices")]
public partial class Invoice : INotifyPropertyChanging, INotifyPropertyChanged
{

    private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

    private long _InvoiceId;

    private string _InvoiceNum;

    private decimal _TotalTaxDue;

剪断

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_InvoiceId", AutoSync=AutoSync.OnInsert, DbType="BigInt NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
    public long InvoiceId
    {
        get
        {
            return this._InvoiceId;
        }
        set
        {
            if ((this._InvoiceId != value))
            {
                this.OnInvoiceIdChanging(value);
                this.SendPropertyChanging();
                this._InvoiceId = value;
                this.SendPropertyChanged("InvoiceId");
                this.OnInvoiceIdChanged();
            }
        }
    }

    [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_InvoiceNum", DbType="VarChar(15)")]
    public string InvoiceNum
    {
        get
        {
            return this._InvoiceNum;
        }
        set
        {
            if ((this._InvoiceNum != value))
            {
                this.OnInvoiceNumChanging(value);
                this.SendPropertyChanging();
                this._InvoiceNum = value;
                this.SendPropertyChanged("InvoiceNum");
                this.OnInvoiceNumChanged();
            }
        }
    }