一、Attribute特性/标签
1.Attribute用来对类、属性、方法等标注额外的信息,贴一个标签
简单的说,定制特性Attribute,本质上就是一个类,它为目标元素提供关联附加信息,并在运行时以反射的方式来获取附加信息。
[Obsolete("此方法已过时")]
public void SayHi()
{
}
加上Obsolete特性,当鼠标放到调用方法上的时候,就会提示此方法已过时
2.Attribute自定义特性类
Attribute就是类,Attribute类名一般都以Attribute结尾
不带数据的特性类
//定义 特性类
public class FlyAttribute : Attribute
{
}
//使用 自定义特性
[Fly] //或者 [FlyAttribute] 可省略 Attribute
puclic class Dog
{
}
带数据的特性类
//定义 特性类
public class FlyAttribute : Attribute
{
public string Name{get;set;}
public FlyAttribute(string strName)
{
this.Name = strName;
}
}
//使用 自定义特性
[Fly("小白")] //或者 [FlyAttribute] 可省略 Attribute
puclic class Dog
{
}
3.获取特性里的数据
通过反射获取
Dog d = new Dog();
Type dogType = d.GetType();
object [] attrs = t.GetCustomAttributes(typeof(FlyAttribute), false);
FlyAttribute dogAttr = attrs[0] as FlyAttribute;
string strName = dogAttr.Name;
二、EF
1.NHibernate不需要写sql语句;ibaties需要写sql语句,是半开放的持久层框架。
2.edmx文件解析
edmx定义三大部分,SSDL content(定义数据库部分)、CSDL content(定义C#类)、C-S mapping content(定义数据库和C#类之间的关系)
3.EF删除、修改
User u = new User(){id=1};
db.Users.Attach(u);
db.Users.Remove();
db.SaveChanges();
User u = new User(){id=1,UserName="aa"};
DbEntityEntry<User> entry = db.Entry<User>(u);
entry.State = EntityState.Unchanged;
entry.Property("UserName").IsModified = true;
db.SaveChanges();
4.延迟加载
IQueryable<UserAddress> addrs = db.UsersAddresses.Where(x=>x.userId = 1);//真实返回的是DbQuery对象,以接口的形式接收
当外键实体相同的时候,只会查询一次出来,不会再次查询
5.表内连接
IQueryable<UserAddress> addrs = db.UsersAddresses.Include("Users");
6.代理类对象
User user = db.Users.Where(u=>u.id=1).FirstOrDefault();//注意,此时返回的是一个User类的代理类对象(包装类对象)