只包括一些简单的教程和查询,只是最基础并没有经过优化
设置数据库表主外键约束
lter table 外键表名 add constraint 约束名称 foreign key(外键字段) references 主键表名(约束列名)
如表A中的Ids是主键,要约束表B中的Aid列,那么语句应该是:
alter table B add constraint A_B_Ids foreign key(Aid) references A(Ids)
有外键添加数据时
有外键的情况应该先添加主表数据,再添加副表数据。
如:有以下两张表
班级表:
CLASSID NAME
1 一班
2 二班
学生表:
SID NAME CLASSID
1 张三 1
2 李四 1
3 王五 2
其中学生表中的CLASSID是班级表CLASSID的外键。
现在要求在学生表中添加一条SID=4,NAME=赵六,CLASSID=3的数据,那么只能先在班级表中加入一条新数据。
1
|
insert
into
班级表
values
(3,
'三班'
);
|
然后再在学生表中添加:
1
|
insert
into
学生表
values
(4,
'赵六'
,3);
|
Linq查询表达式是Linq中的非常重要的一部分内容,它可以从一个或多个给定的数据源中检索数据,并指定检索结果的数据类型和表现形式
在项目中用到了ef和linq来查询数据,并且将分页和多条件模糊查询整合一起 linq对给定数据源示例,
- Students.Where(s=>(s.id<10&&s.Name.Length<10)).OrderByDescending(o=>s.Name).Select(o=>new{o.id,o.Name})
其中linq中具有or子句lambda表达式和空值返回的结果,
如果缺少orderby语句会报错
报错
Model.Name = db.Products.Where(p => p.ProductSubcategoryID == id)
.Skip((page - 1) * pageSize)
.Take(pageSize)
.ToList();
修正
Model.Name = db.Products.Where(p => p.ProductSubcategoryID == id)
.OrderBy(p => p.ProductSubcategoryID) // <---- this
.Skip((page - 1) * pageSize)
.Take(pageSize)
.ToList();
以上是我从stack看来得
linq模糊查询的时候使用了contains方法
ambda表达式Contains方法(等价于SQL语句中的like)使用注意事项:
1、使用Contains方法的必备条件:
Contains等价于SQL中的like语句。不过Contains只针对于字符串(string)类型的数据而言。如果是int等数值类型,则不会有Contains方法的存在,因此数值字段貌似无法通过使用Lambda表达式来完成like操作。因此在使用实体框架的同时,设计数据的时候如果想使用like请确保数据库字段为字符串类型(text、varchar等)
2、Contains方法关联方法(均等价于SQL中的like【注意:这里为什么会说是等价呢,因为如下列出的方法均为Stirng里的方法。like的应用是不分字符类型的,数值行亦可】):
Contains等价于like '%key%' 指示指定的 String 对象是否出现在此字符串中。
EndsWith等价于like '%key' 确定此字符串实例的结尾是否与指定的字符串匹配。
StartsWith等价于like 'key%' 确定此字符串实例的开头是否与指定的字符串匹配。
3、使用Contains方法时前往不要忘记非NULL的判断:
数据库中如果存在值为NULL的值。
为什么会报错,看看如下的代码,想必大家也就知道其中的所以然了。
string str = null;
str.Contains("报错啦");//这里会报“未将对象引用设置到对象的实例。”错
因此不要忘记将代码
o.SearchKeyword.Contains("查询条件")
改写为:
o.SearchKeyword != null && o.SearchKeyword.Contains(("查询条件")
再使用linq获取回来list后要将list转换为JSON格式返回给客户端如果实体具有主外键关系如果直接使用
Newtonsoft.Json.JsonConvert.SerializeObject(orderLs).ToString();
会报错
Newtonsoft.Json.JsonSerializationException: Self referencing loop detected for property 'CyberUser' with type 'DAL.CyberUser'. Path '[0].EventRegistrations[0].CyberUser.UserLogs[0]'.
JsonConvert.SerializeObject(ResultGroups, Formatting.None,
new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
});
忽略子级即可