Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq到SQL在数据库中添加记录是如何工作的?_C#_.net_Linq_Linq To Sql_C# 3.0 - Fatal编程技术网

C# 使用Linq到SQL在数据库中添加记录是如何工作的?

C# 使用Linq到SQL在数据库中添加记录是如何工作的?,c#,.net,linq,linq-to-sql,c#-3.0,C#,.net,Linq,Linq To Sql,C# 3.0,我正在学习Linq到SQL,从一个示例中,我通过传递一个自定义类型对象在db中添加了一条记录。例如,要在users表中添加新用户,我执行了以下操作: db.Users.InsertOnSubmit(newUser); db.SubmitChanges(); 我无法理解Linq如何知道应该在哪个列中添加哪个属性值 有没有更好的方法使用Linq在db中添加新记录 还请说明如果我不使用自定义类型(DTO),如何添加 因此,感谢您宝贵的时间和分享。您的DBML文件详细说明了如何将所有对象的属性映射到您

我正在学习Linq到SQL,从一个示例中,我通过传递一个自定义类型对象在db中添加了一条记录。例如,要在users表中添加新用户,我执行了以下操作:

db.Users.InsertOnSubmit(newUser);
db.SubmitChanges();
我无法理解Linq如何知道应该在哪个列中添加哪个属性值

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

还请说明如果我不使用自定义类型(DTO),如何添加


因此,感谢您宝贵的时间和分享。

您的DBML文件详细说明了如何将所有对象的属性映射到您的DBMS。添加到DBML中的数据库表/视图会为您创建相应的类,如
用户
类,其属性用告诉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;
剪断


etc

你首先创建了映射,不是吗?安德烈,我没有有意识地创建映射,可能是我做的,我不知道。我只是在设计器中添加表。是的,设计器为您创建映射。看我的answer@AdamRackis,请解释一下我在你的回复中评论的一点。Thanks@Adam谢谢,我已经看到了designer文件,但仍然无法了解自定义对象是如何映射到db列的。你能具体说明一下吗。事实上,我没有得到两个字符串db列,我可以映射或更改映射。请引导。展开dbml文件,然后单击.designer.cs文件。通读一遍,你会看到你的类被定义,它们的属性被属性修饰,比如
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage=“\u InvoiceNum”,DbType=“VarChar(15)”)]
这就是Linq知道如何将对象映射到database@Adam再次感谢。我可以看到在设计器文件中提到了数据库表的所有列。类似地,每个db列上都会提到事件(更改和更改事件)。请不要被我打扰。在事件中,只提到参数的数据类型,参数名为value(如部分void OnIdChanging(int value);),其中Linq将自定义类型对象属性映射到db列。我不明白您所说的自定义类型对象属性和db列是什么意思。@Adam我的意思是假设我有一个DTO用户,该用户有3个属性id、名称和地址。像添加一个新用户一样,我创建了一个类,它有3个属性id、name和address。
    [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();
            }
        }
    }