C# 使用Linq到SQL在数据库中添加记录是如何工作的?
我正在学习Linq到SQL,从一个示例中,我通过传递一个自定义类型对象在db中添加了一条记录。例如,要在users表中添加新用户,我执行了以下操作: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文件详细说明了如何将所有对象的属性映射到您
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();
}
}
}