熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

.NetTiers使用技巧

2013-11-13 10:11:09  來源: .NET編程 

  NetTiers是Net下面一款出色的自動生成模版能夠非常快速地生成數據訪問層並且可以方便地進行擴展

  支持的特性也相當多除常規的CRUD+分頁查詢外還包含以下特性:

   自定義存儲過程的自動封裝 這樣就不用額外寫代碼就可以完成自定義存儲過程的調用了 但是存儲過程要以它規定的命名規則進行命名這樣它才會識別出來

   對索引列生成查詢方法 比如在用戶表中經常給定用戶名和密碼這兩個條件 在這兩個列上建立非聚集索引那麼NetTiers將自動生成包含這兩個條件的查詢方法

  支持Deepload級聯查詢 這個雖然效率不是很高但在中小型的應用上還是相當方便地

   使用Processor機制來完成一系列流程的連續調用進行事務處理

  具體的使用方法可以參見園子裡面其它人寫的文章或官方文檔這裡主要要討論的是如果使用NetTiers生成的東西

  通常我們的項目一般會使用一些源代碼管理工具這樣的話在編輯一份代碼文件之前需要將它簽出來但是在實際工具中數據庫的結構可能隨時發生變化在這種情況下就需要重新使用NetTiers進行代碼生成如果我們直接使用它生成出來的解決方案進行開發的話就會遇到一些麻煩這時要手動將它要生成的文件一個一個簽出來幾乎太困難了那麼怎麼辦呢?

  我的辦法是不直接使用它生成的解決方案而是引用它編譯之後的程序集擴展部分的代碼寫在自己的工程中從它生成的基類繼承過來 這樣每將即使是要改庫只需要將它生成的幾個程序集簽出來重新運行CodeSmith生成代碼後把編譯出來的程序集拷貝過來覆蓋掉再提交就OK了

  這時我們的Service層看起來可能是這個樣子:

    public class UsersFacade : UsersServiceBase
{
public UsersFacade()
: base() { }
public Users ValidateUser(string username string password)
{
SqlFilterBuilder<UsersColumn> filter = new SqlFilterBuilder<UsersColumn>();
filterJunction = SqlUtilAND;
filterAppendEquals(UsersColumnName username);
filterAppendEquals(UsersColumnPassword password);
int count = ;
TList<Users> users = DataRepositoryUsersProviderGetPaged(filterToString() null out count);
if (usersCount > )
return users[];
else
return null;
}
public Users ValidateUserAlter(string username string password)
{
TList<Users> users = Find(stringFormat(Name = {} AND Password = {} username password));
if (users != null && usersCount > )
return users[];
else
return null;
}
public Users ValidateUserThird(string username string password)
{
GBDataParameterizedSqlFilterBuilder<Users> filter = new ParameterizedSqlFilterBuilder<Users>();
filterAppendEquals(Name Darkangel);
filterAppendEquals(Password );
TList<Users> users = GBDataDataRepositoryUsersProviderFind(filterGetParameters());
if (users != null && usersCount > )
return users[];
else
return null;
}
}

  再看看單元測試的代碼:

    [TestFixture]
public class SampleFixture
{
Users testUser = new Users();
[TestFixtureSetUp]
public void Setup()
{
Users u = new Users();
uName = Darkangel;
uPassword = ;
uUserId = IdentityGeneratorInstanceNextIdentity();
testUserUserId = uUserId;
UsersFacade fa = new UsersFacade();
faInsert(u);
}
[TestFixtureTearDown]
public void Clearup()
{
UsersFacade f = new UsersFacade();
fDelete(testUserUserId);
}
[Test]
public void GetAllUserTest()
{
UsersFacade facade = new UsersFacade();
//TList<Users> list = facadeFind(Name=Darkangel);
            TList<Users> list = facadeGetAll();
ConsoleWriteLine(Toatal user acount is : + listCount);
AssertIsNotNull(list);
AssertIsTrue(listCount > );
}
[Test]
public void ValidateUserTest()
{
UsersFacade facade = new UsersFacade();
Users u = facadeValidateUser(Darkangel );
AssertIsNotNull(u);
AssertIsTrue(uUserIdLength > );
}
[Test]
public void ValidateUserAlterTest()
{
UsersFacade facade = new UsersFacade();
Users u = facadeValidateUserAlter(Darkangel );
AssertIsNotNull(u);
AssertIsTrue(uUserIdLength > );
}
[Test]
public void ValidateuserThirdTest()
{
UsersFacade facade = new UsersFacade();
Users u = facadeValidateUserThird(Darkangel );
AssertIsNotNull(u);
AssertIsTrue(uUserIdLength > );
}
}
  
  這樣我們就只需要管理我們的生成配置文件就可以了


From:http://tw.wingwit.com/Article/program/net/201311/12822.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.