zoukankan      html  css  js  c++  java
  • .net学习之Attribute特性和EF关键知识点

    一、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类的代理类对象(包装类对象)

  • 相关阅读:
    网络基础
    socket编程初识
    socket之黏包
    socketserver和socket的补充(验证客户端合法性)
    操作系统介绍
    进程初识和multiprocessing模块之Process
    进程Process之join、daemon(守护)、terminate(关闭)
    进程间通信(队列、管道)、消费者模型和进程池(apply,apply_async,map)
    数字证书私钥sign及验证
    JAVA获取密钥公钥的keytool的使用
  • 原文地址:https://www.cnblogs.com/yxlblogs/p/3911600.html
Copyright © 2011-2022 走看看