Linq to Sql学习之2


今天使用一对多的使用小记!

两个表UserInfo 和 Sort 一对多关系

[Table(Name="userInfo")]
public class UserInfo
{
[Column(IsDbGenerated=true,IsPrimaryKey=true)]
public int id { set; get; }

[Column]
public string userName { set; get; }

[Column]
public string pwd { set; get; }

[Column]
public int age { set; get; }

}

[Table(Name="Score")]
public class Score
{
[Column]
int id { set; get; }

[Column]
public int chinese{set;get;}

[Column]
public int english { set; get; }


[Column]
public int userId { set; get; }


}

class Demo
{
static void Main(string[] args)
{
DataContext ds = new DataContext("server=.;database=demodb;user=sa;pwd=sa");
Table<UserInfo>userInfos=ds.GetTable<UserInfo>();
Table<Score>scores=ds.GetTable<Score>();

//两张表内联

var user = from u in userInfos join s in scores on u.id equals s.userId select new { UserName=u.userName,Pwd=u.pwd,Age=u.age};

foreach(var userInfo in user)
Console.WriteLine(string.Format("{0},{1},{2}",userInfo.UserName,userInfo.Pwd,userInfo.Age));

}
}

//以上形式比较显示体现了两表连接 ,是否可以自动关联起来 答案那是肯定的,,,,

在UserInfo中添加对多方的Score的引用

//userId 是在Score中引用UserInfo的一个外键 是集合 理论上可以理解成IList<Score>

[Association(OtherKey="userId")]
public EntitySet<Score> Scores { set; get; }

在Score中体现一的一方 也就是UserInfo

添加

private EntityRef<UserInfo> userInfo;

////userId是Score表中的外键
[Association(Storage="userInfo",ThisKey="userId",IsForeignKey=true)]
public UserInfo UserInfo
{
get { return userInfo.Entity; }
set { userInfo.Entity = value; }
}

测试:

DataContext ds = new DataContext("server=.;database=demodb;user=sa;pwd=sa");
Table<UserInfo>userInfos=ds.GetTable<UserInfo>();

var user = from u in userInfos where u.id==1 select u;

UserInfo userInfo = user.Single<UserInfo>();

if (userInfo != null)
{

Console.WriteLine("用户:" + userInfo.userName);
foreach (Score s in userInfo.Scores)
{
Console.WriteLine(string.Format("语文成绩:{0} 英语成绩{1}", s.chinese, s.english));
}
}

//查询用户的时候 其成绩也是已经加载到了该用户中了。

DataContext ds = new DataContext("server=.;database=demodb;user=sa;pwd=sa");

Table<Score> Scores = ds.GetTable<Score>();

var score = from s in Scores where s.id == 1 select s;

Score scoreTest = score.Single<Score>();

Console.WriteLine(string.Format("用户:{0} 语文成绩:{1}",scoreTest.UserInfo.userName,scoreTest.chinese));

查询成绩也会加载出该用户!

优质内容筛选与推荐>>
1、动态规划——线性DP
2、js跨域原理及解决方案
3、JS正则表达式--正则表达式对象和全局RegExp对象
4、新的开始
5、新开的


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号