zoukankan      html  css  js  c++  java
  • AutoPoco的使用

    官方开发指导https://autopoco.codeplex.com/documentation

    初步使用:

    SimpleUser是自己要批量创建的类

    1)创建管理工厂

     1 IGenerationSessionFactory factory = AutoPocoContainer.Configure(x =>
     2 
     3 {
     4 
     5     x.Conventions(c =>
     6 
     7     {
     8 
     9         c.UseDefaultConventions();
    10 
    11     });
    12 
    13     x.AddFromAssemblyContainingType<SimpleUser>();
    14 
    15 });
    View Code

    2) 从工厂中创建会话

    IGenerationSession session = factory.CreateSession();

    3) 使用会话创建集合,List中的100表示创建含一百个元素的集合,创建的时候并没对集合中的元素进行赋值。

    1 SimpleUser user = session.Single<SimpleUser>().Get();
    2 
    3 List<SimpleUser> users = session.List<SimpleUser>(100).Get();

    在初步的基础上进行赋值

     1 session.List<SimpleUser>(100)
     2 
     3                  .First(50)
     4 
     5                       .Impose(x => x.FirstName, "Rob")
     6 
     7                       .Impose(x => x.LastName, "Ashton")
     8 
     9                   .Next(50)
    10 
    11                       .Impose(x => x.FirstName, "Luke")
    12 
    13                       .Impose(x => x.LastName, "Smith")
    14 
    15                   .All().Random(25)
    16 
    17                       .Impose(x => x.Role,roleOne)
    18 
    19                   .Next(25)
    20 
    21                       .Impose(x => x.Role,roleTwo)
    22 
    23                   .Next(50)
    24 
    25                       .Impose(x => x.Role, roleThree)
    26 
    27                  .All()
    28 
    29                       .Invoke(x => x.SetPassword("Password1"))
    30 
    31                  .Get();

    测试发现:

    1、Next方法必须在First 或者Random使用之后才能使用,并且First只能使用一次在没调用All方法之前,First、Random、Next使用完之后必须调用All方法;

    2、每次只能为一个属性赋值;

    从数据源中创建

     1 mFactory = AutoPocoContainer.Configure(x =>
     2 
     3 {
     4 
     5     x.Conventions(c =>
     6 
     7     {
     8 
     9         c.UseDefaultConventions();
    10 
    11     });
    12 
    13  
    14 
    15     x.AddFromAssemblyContainingType<SimpleUser>();
    16 
    17     x.Include<SimpleUser>()
    18 
    19         .Setup(c => c.EmailAddress).Use<EmailAddressSource>()
    20 
    21         .Setup(c => c.FirstName).Use<FirstNameSource>()
    22 
    23         .Setup(c => c.LastName).Use<LastNameSource>()
    24 
    25         .Invoke(c => c.SetPassword(Use.Source<String, PasswordSource>()));
    26 
    27     x.Include<SomeType>()
    28 
    29         .Setup(c => c.SomeString).Use<RandomStringSource>(5,10);
    30 
    31 });

    Use中的泛型就是传递给集合元素实例数据源,是个类。该类必须继承抽象泛型类DatasourceBase<T>  泛型T表示对应属性的数据类型。该抽象类中只有一个抽象方法Next,该方法就是返回数据给属性,实现给属性赋值。从而达到数据绑定;

    在Conventions中实现数据源绑定

    For example

     1 A convention to set all String EmailAddress properties to use the EmailAddressSource
     2 
     3 public class EmailAddressPropertyConvention : ITypePropertyConvention
     4 
     5 {
     6 
     7     public void Apply(ITypePropertyConventionContext context)
     8 
     9     {
    10 
    11         context.SetSource<EmailAddressSource>();
    12 
    13     }
    14 
    15  
    16 
    17     public void SpecifyRequirements(ITypeMemberConventionRequirements requirements)
    18 
    19     {
    20 
    21         requirements.Name(x => String.Compare(x, "EmailAddress", true) == 0);
    22 
    23         requirements.Type(x => x == typeof(String));
    24 
    25     }
    26 
    27 }
    28 
    29  
    30 
    31 A convention to set all String EmailAddress fields to use the EmailAddressSource
    32 
    33 public class EmailAddressFieldConvention : ITypeFieldConvention
    34 
    35 {
    36 
    37     public void Apply(ITypeFieldConventionContext context)
    38 
    39     {
    40 
    41         context.SetSource<EmailAddressSource>();
    42 
    43     }
    44 
    45  
    46 
    47     public void SpecifyRequirements(ITypeMemberConventionRequirements requirements)
    48 
    49     {
    50 
    51         requirements.Name(x => String.Compare(x, "EmailAddress", true) == 0);
    52 
    53         requirements.Type(x => x == typeof(String));
    54 
    55     }
    56 
    57 }
    58 
    59  
    60 
    61  
    62 
    63 x.Conventions(c => c.Register(typeof(IdPropertyConvention)));
    64 
    65 x.AddFromAssemblyContainingType<SimpleUser>();

    在context中有个Setvalue方法 ,应该是给绑定数据源传值的,测试使用的时候并没有效果,传递多个值理论是使用的数组。问题未解决。

  • 相关阅读:
    mySQL练习题
    JAVA实现C/S结构小程序
    JavaLinkedHashSet练习
    关于Extjs删除分页后删除最后一条数据页面无效的问题。
    hibernate 插入,更新数据库错误
    错误!错误!错误!
    坑爹的oracle
    关于hibernate实体类
    第一个项目的需求分析
    Ueditor 单独使用上传图片及上传附件方法
  • 原文地址:https://www.cnblogs.com/gsjlovenet/p/5443675.html
Copyright © 2011-2022 走看看