Linq to SQL中添加关系数据
在实际中有如下场景的表:
Group和Tag是多对多的关系,通过GroupTag表进行联系。其中GroupID和TagID都是数据库自动生成的,在GroupTag关系表中又作为各自的外键。
此时使用VS工具会生成类似如下的类:
[Table(Name="dbo.GroupTag")]
public partial class GroupTag : INotifyPropertyChanging, INotifyPropertyChanged
{

[Association(Name="Group_GroupTag", Storage="_Group", ThisKey="GroupID", IsForeignKey=true)]
public Group Group
{

}



[Column(Storage="_GroupID", DbType="Int NOT NULL", IsPrimaryKey=true)]
public int GroupID
{

}



[Association(Name="Tag_GroupTag", Storage="_Tag", ThisKey="TagID", IsForeignKey=true)]
public Tag Tag
{

}



[Column(Storage="_TagID", DbType="Int NOT NULL", IsPrimaryKey=true)]
public int TagID
{

}


}
第一种方法,我们可以使用事务的方式进行添加,很直观。首先添加Tag,这时TagID已经由数据库生成,再将TagID和GroupID再添加到GroupTag表中。
public bool AddTag(int groupID, string tagString)
{

using (TransactionScope ts = new TransactionScope())
{
Tag tag = new Tag();
tag.TagString = tagString;
dataContext.Tags.InsertOnSubmit(tag);
dataContext.SubmitChanges();
GroupTag groupTag = new GroupTag();
groupTag.GroupID = groupID;
groupTag.Tag = tag.TagID;
dataContext.GroupTags.InsertOnSubmit(groupTag);
dataContext.SubmitChanges();
ts.Complete();
}

}
第二种方法,利用Linq的自动特点。
public bool AddTag(int groupID, string tagString)
{
Tag tag = new Tag();
tag.TagString = tagString;
GroupTag groupTag = new GroupTag();
groupTag.GroupID = groupID;
groupTag.Tag = tag;
dataContext.GroupTags.InsertOnSubmit(groupTag);
dataContext.SubmitChanges();

}
具体原因还不清楚,不过看VS生成的代码或许有帮助:
[Table(Name="dbo.Tags")]
public partial class Tag : INotifyPropertyChanging, INotifyPropertyChanged
{

[Column(Storage="_TagID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
public int TagID
{

}

}加了这么多Attributes肯定有用的嘛。



浙公网安备 33010602011771号