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=trueIsDbGenerated=true)]
public int TagID
{
 
}

 
}

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

 

posted @ 2008-07-28 14:46  sayo.net  阅读(585)  评论(0)    收藏  举报