官方開髮指導https://autopoco.codeplex.com/documentation 初步使用: SimpleUser是自己要批量創建的類 1)創建管理工廠 IGenerationSessionFactory factory = AutoPocoContainer.Configure( ...
官方開髮指導https://autopoco.codeplex.com/documentation
初步使用:
SimpleUser是自己要批量創建的類
1)創建管理工廠
IGenerationSessionFactory factory = AutoPocoContainer.Configure(x =>
{
x.Conventions(c =>
{
c.UseDefaultConventions();
});
x.AddFromAssemblyContainingType<SimpleUser>();
});
2) 從工廠中創建會話
IGenerationSession session = factory.CreateSession();
3) 使用會話創建集合,List中的100表示創建含一百個元素的集合,創建的時候並沒對集合中的元素進行賦值。
SimpleUser user = session.Single<SimpleUser>().Get();
List<SimpleUser> users = session.List<SimpleUser>(100).Get();
在初步的基礎上進行賦值
session.List<SimpleUser>(100)
.First(50)
.Impose(x => x.FirstName, "Rob")
.Impose(x => x.LastName, "Ashton")
.Next(50)
.Impose(x => x.FirstName, "Luke")
.Impose(x => x.LastName, "Smith")
.All().Random(25)
.Impose(x => x.Role,roleOne)
.Next(25)
.Impose(x => x.Role,roleTwo)
.Next(50)
.Impose(x => x.Role, roleThree)
.All()
.Invoke(x => x.SetPassword("Password1"))
.Get();
測試發現:
1、Next方法必須在First 或者Random使用之後才能使用,並且First只能使用一次在沒調用All方法之前,First、Random、Next使用完之後必須調用All方法;
2、每次只能為一個屬性賦值;
從數據源中創建
mFactory = AutoPocoContainer.Configure(x =>
{
x.Conventions(c =>
{
c.UseDefaultConventions();
});
x.AddFromAssemblyContainingType<SimpleUser>();
x.Include<SimpleUser>()
.Setup(c => c.EmailAddress).Use<EmailAddressSource>()
.Setup(c => c.FirstName).Use<FirstNameSource>()
.Setup(c => c.LastName).Use<LastNameSource>()
.Invoke(c => c.SetPassword(Use.Source<String, PasswordSource>()));
x.Include<SomeType>()
.Setup(c => c.SomeString).Use<RandomStringSource>(5,10);
});
Use中的泛型就是傳遞給集合元素實例數據源,是個類。該類必須繼承抽象泛型類DatasourceBase<T> 泛型T表示對應屬性的數據類型。該抽象類中只有一個抽象方法Next,該方法就是返回數據給屬性,實現給屬性賦值。從而達到數據綁定;
在Conventions中實現數據源綁定
For example
A convention to set all String EmailAddress properties to use the EmailAddressSource
public class EmailAddressPropertyConvention : ITypePropertyConvention
{
public void Apply(ITypePropertyConventionContext context)
{
context.SetSource<EmailAddressSource>();
}
public void SpecifyRequirements(ITypeMemberConventionRequirements requirements)
{
requirements.Name(x => String.Compare(x, "EmailAddress", true) == 0);
requirements.Type(x => x == typeof(String));
}
}
A convention to set all String EmailAddress fields to use the EmailAddressSource
public class EmailAddressFieldConvention : ITypeFieldConvention
{
public void Apply(ITypeFieldConventionContext context)
{
context.SetSource<EmailAddressSource>();
}
public void SpecifyRequirements(ITypeMemberConventionRequirements requirements)
{
requirements.Name(x => String.Compare(x, "EmailAddress", true) == 0);
requirements.Type(x => x == typeof(String));
}
}
x.Conventions(c => c.Register(typeof(IdPropertyConvention)));
x.AddFromAssemblyContainingType<SimpleUser>();
在context中有個Setvalue方法 ,應該是給綁定數據源傳值的,測試使用的時候並沒有效果,傳遞多個值理論是使用的數組。問題未解決。