zoukankan      html  css  js  c++  java
  • 开放源码的对象关系映射工具ORM.NET 插入数据 Insert/Update Data

    DataManager.New[Object] 创建数据记录

    下面的代码片断创建一笔学生记录,然后把它保存到数据库中。

    DataManager dm = new DataManager(Config.Dsn);
    //assign a new object reference
    Student s = dm.NewStudent();
    s.FirstName = “Mike”;
    s.LastName = “Smith”;
    dm.CommitAll();

    如果是主从关系的数据表,Student和Contact, ORM.NET会帮助处理好它们之间的外键引用关系

    DataManager dm= new DataManager(Config.Dsn);
    Student s = dm.NewStudent();
    s.FirstName = "Tim";
    s.LastName = "Brown";
    
    s.Contact = dm.NewContact();
    s.Contact.Address1 = "555 Main Street";
    s.Contact.Address2 = "Apt 6";
    s.Contact.City = "Oakland";
    s.Contact.State = "CA";
    s.Contact.PostalCode = "80304";
    s.Contact.Country = "US";
    // create both records and maintain the relationship between them in database
    dm.CommitAll();  

     

    增加子对象 Add[ChildObject] Methods

    通过Add[Child]方法,可以新加子对象,在CommitAll时,ORM.NET会自动维护它们的主外键关系。

    DataManager dm= new DataManager(Config.Dsn);
    // Create new Student object
    Student student = dm.NewStudent();
    student.FirstName = "Cherry";
    student.LastName = "Jackson";
    // Create a new contact
    contact contact = dm.NewContact();
    contact.Address1 = "55 6th Avenue";
    // add other contact information..
    // Add the new Student to the new Contact object
    contact.AddStudent(student);
    dm.CommitAll();
     

    New[ChildObject] methods

    // find an existing Contact record
    dm.QueryCriteria.And(JoinPath.Contact.Columns.Address1,"123 Main Street");
    Contact contact = dm.GetContact(FetchPath.All);
    Student student = contact.NewStudent();  // create a new Child object - Student
    student.firstname = "Tom";
    student.LastName = "Smith";
    //CommitAll() will create a new Student object and relate it to the Contact object
    dm.CommitAll();    

    如果对象已经在内存中,可以通过NewChild方式,创建新的子对象,在调用CommitAll时,会保存到数据库中。

    Using Require Setting on  New[Object] Methods for Column Properties

    可以通过在ORM.NET Object Browser中设定属性FirstName为Required,必须输入。与此同时,NewStudent方法签名也会变化,以用于传入FirstName的值。

    image

    用于新加新对象的代码如下

    //FirstName is now required to create new Student object                   
    Student s = dm.NewStudent("Mike"); 
    //add a LastName value as well if you like...
    s.LastName = Smith;                 
    dm.CommitAll();

    第一个参数Mike,就是FirstName。一般,只需要将主键字段列设定为Required即可。

    Using Require Parent Object New[Object] Methods on Child records

    Required属性也可以用在子对象的创建过程中,如下图所示

    image

    经过上图所示的设置,在NewObject中的一个方法签名,cocntact是必须输入的。

    DataManager dm = new DataManager(Config.Dsn);
    // create a new contact object with some information
    Contact contact = dm.NewContact();       
    contact.Address1 = "123 Require Parent";
    contact.City = "Boulder";
    contact.Country = "US";
    // Contact object is now required
    Student student = dm.NewStudent(contact); 
    student.FirstName = "John";
    student.LastName = "Glass";
    // Create the new Student and related Contact record
    dm.CommitAll();     

    属性与它的父对象可以同时设置为Required,像下面的代码这样

    // A FirstName property and Contact object are now required to create a new Student object
    Contact = dm.GetContact();
    Student student = dm.NewStudent(“Tom”,contact); 
     

    更新数据

    DataManager dm = new DataManager(Config.Dsn);
    dm.QueryCriteria.Clear();
    dm.QueryCriteria.And(JoinPath.Teacher.Columns.FirstName,"Tom",MatchType.Exact);
    Teacher teacher = dm.GetTeacher(FetchPath.Teacher);
    teacher.FirstName = "Thomas";
    teacher.LastName = "Franklin";
    dm.CommitAll();      // Will perform required update operation as a transaction

    CommitAll方法会生成下面的SQL语句

    BEGIN TRANSACTION
    UPDATE[Teacher]
        SET    [LastName] = 'Franklin',
               [FirstName] = 'Thomas'
    WHERE  ID = 10008
    
    IF @@ERROR <> 0 BEGIN
          ROLLBACK TRANSACTION
          RETURN
    END
    COMMIT TRANSACTION


    DataManager.CommitAllDebug 

    如果是调试程序,可以用CommitAllDebug生成所有SQL语句,但不会把SQL提交到数据库中执行。

    dm.QueryCriteria.Clear();
    dm.QueryCriteria.And(JoinPath.Teacher.Columns.FirstName,"Tom", MatchType.Exact);
    Teacher teacher = dm.GetTeacher(FetchPath.Teacher);
    teacher.FirstName = "Thomas";
    teacher.LastName = "Franklin";
    // Will NOT perform any changes but will generate the SQL statement(s) that would be        
    // used in the Output window
    dm.CommitAllDebug(); 

    这时,可以到Output窗口中查看生成SQL语句,以检测逻辑是否正确。

    如果是调用DataManager.CommitAll,则可以通过调用它的属性LastCommitText来获取最后一次事务的SQL语句

    DataManager dm = new DataManager(Config.Dsn);
    dm.QueryCriteria.Clear();
    dm.QueryCriteria.And(JoinPath.Teacher.Columns.FirstName,"Tom",MatchType.Exact);
    Teacher teacher = dm.GetTeacher(FetchPath.Teacher);
    teacher.FirstName = "Thomas";
    teacher.LastName = "Franklin";
    dm.CommitAll();      
    // ouput generated SQL statement to console
    Console.WriteLine("OUTPUT SQL " + dm.LastCommitText);  
  • 相关阅读:
    项目实战9—企业级分布式存储应用与实战MogileFS、FastDFS
    项目详解4—haproxy 反向代理负载均衡
    项目实战4—HAProxy实现高级负载均衡实战和ACL控制
    项目实战2.1—nginx 反向代理负载均衡、动静分离和缓存的实现
    zabbix设置报警通知
    zabbix创建触发器
    zabbix的启动和关闭脚本
    zabbix监控第一台服务器
    zabbix的源码安装
    Linux命令之乐--iconv
  • 原文地址:https://www.cnblogs.com/JamesLi2015/p/2178779.html
Copyright © 2011-2022 走看看