O ObjectDataSource em asp.net2.0 pode permitir que controles de exibição de dados, como GridView, sejam vinculados para exibição e edição. Ele também oferece suporte a paginação, classificação, etc. Depois de usar o ORM, você também pode usar ObjectDataSource.
A paginação aqui não remove mais todas as páginas do banco de dados e depois as vincula seletivamente, mas remove diretamente as páginas do banco de dados e depois as vincula. A diferença ainda é enorme e a eficiência melhorou bastante.
Edição, criação e classificação são fornecidas diretamente pelo ObjectDataSource e não há necessidade de escrever nenhum código no GridView.
Dessa forma, o design do objeto pode conter muita lógica, pelo menos para operações de banco de dados, e a IU parecerá relativamente simples. Se você retirá-lo e abri-lo um pouco, será mais benéfico transplantá-lo para vencer. no futuro, ou transformá-lo em um SmartClient.
Aqui está um blog que fala melhor http://www.evosoftworks.com/Articles/wormods.aspx .
Acontece que eu estava usando WilsonORM, então fiz um de acordo.
A estrutura básica é assim:
UI (GridView e outros controles--controle ObjectDataSource)----〉Classe ObjectDataSource (Objeto, gravação de paginação CRUD e outras lógicas)---〉(ORM implementa CRUD)---〉O banco de dados
tem várias etapas principais
1: Adicione propriedades e métodos ao objeto para completar CRUD, paginação e outras lógicas
2: Configure controles de UI, como GridView, para se conectar ao controle ObjectDataSource.
Vejamos primeiro o primeiro
1: Adicione propriedades e métodos ao objeto para completar CRUD, paginação e outras lógicas. A classe Object é gerada pela ferramenta com base na estrutura do banco de dados, e o arquivo de mapeamento também é gerado.
Primeiro, adicione um atributo de identificação DataObject() ao Objeto, no namespace System.ComponentModel [DataObject()]
classe pública ProductDescription
{Segundo, adicione métodos CRUD a esta classe de objeto.
Vejamos primeiro um método Insert
[DataObjectMethod(DataObjectMethodType.Inserir)]
inserção estática pública vazia (ProductDescription productDescription)
{
tentar
{
Manager.DataManager.StartTracking(produtoDescrição, InitialState.Inserted);
Manager.DataManager.PersistChanges(produtoDescrição);
}
pegar (exceção ex)
{
log.Error(ex);
}
} Este método precisa ser precedido por um atributo [DataObjectMethod(DataObjectMethodType.Insert)], indicando que este é o método Insert;
Este método é um método público estático;
O parâmetro é uma instância do próprio objeto. Isso é melhor, porque a lógica é fácil de entender e está toda operando no Object.
O restante dos métodos Delete e Update também são escritos dessa maneira.
Então dê uma olhada no método Select, que é bastante especial.
Selecione o método
1 [DataObjectMethod(DataObjectMethodType.Select)]
2 coleção pública <ProductDescription> Recuperar (string query, int maxRows, int startRowIndex, string sortClause)
3 {
4 tentativas
5 {
6 int numPáginas = 0;
7 if (sortClause == null || sortClause == "")
8 sortClause = "ModifiedDate Desc";
9 Coleção<ProdutoDescrição> cs;
10 cs = RetrievePage(query, sortClause, maxRows, (int)Math.Ceiling((double)startRowIndex / maxRows) + 1, out numPages);
11 _numRecs = ((IObjectPage)cs).TotalCount;
12 CS de retorno;
13}
14 captura (exceção ex)
15 {
16 log.Erro(ex);
17 retorna nulo;
18}
19}
20 [DataObjectMethod(DataObjectMethodType.Select)]
21 Recuperação de ObjectSet público estático (chave de string, valor de string)
vinte e dois {
23 if (Valor == nulo || Valor == "")
24 retorna nulo;
25 tentativas
26 {
27 Auxiliar QueryHelper = Manager.DataManager.QueryHelper;
28 Chave = helper.GetFieldName(typeof(ProductDescription).ToString() + "." + Chave);
29 Consulta ObjectQuery = new ObjectQuery(typeof(ProductDescription), String.Format("{0}='{1}'", Chave, Valor), "");
30 ObjectSet obj = Manager.DataManager.GetObjectSet(query);
31 objeto de retorno;
32}
33 captura (exceção ex)
34 {
35 log.Erro(ex);
36 retorna nulo;
37}
38}
39
40 public int RecCount(consulta de string, int maxRows, int startRowIndex, string sortClause)
41 {
42 return _numRecs;
43}
44
45 public static Collection<ProductDescription> RetrievePage(string whereClause, string sortClause, int pageSize, int pageIndex, out int pageCount)
46 {
47 ObjectQuery<ProductDescription> consulta = new ObjectQuery<ProductDescription>(whereClause, sortClause, pageSize, pageIndex);
48 ObjectSet<ProductDescription> pageSet = Manager.DataManager.GetObjectSet<ProductDescription>(consulta);
49 pageCount = pageSet.PageCount;
50 retornar conjunto de páginas;
51 } O primeiro método é public Collection<ProductDescription> Retrieve(string query, int maxRows, int startRowIndex, string sortClause), que é um método que pode implementar paginação e classificação integradas. Deve-se notar que este código _numRecs = ((IObjectPage)cs).TotalCount; Aqui, após a paginação, o número total de páginas é retirado imediatamente. Isso é usado para exibir o número da página correspondentemente, o método public int RecCount(; string query, int maxRows, int startRowIndex, string sortClause) são usados para recuperar o número de registros, observe que esses dois métodos devem corresponder e os parâmetros são os mesmos;
O segundo método, static public ObjectSet Retrieve(string Key, string Value), simplesmente recupera um registro. Pode ser usado na exibição de DetailView/FormView.
Embora o código pareça muito, na verdade ele é muito padronizado, então você pode usar o CodeSmith ou modificar diretamente a ferramenta ORMHelper para gerá-lo dinamicamente sem escrever o código manualmente.
Com esses quatro métodos, CRUD, paginação e classificação estão completos. Esse objeto não tem nada a ver com UI, mas apenas com lógica de dados.
2: Configuração da IU. A configuração da UI também é dividida em duas camadas: GridView e outros controles de exibição ObjectDataSource;
Agora configure a fonte de dados Object para controles como GridView e conecte-se diretamente ao Object para implementar funções como exibição e edição. Na verdade, é para definir uma propriedade conectada ao ObjectDataSource.
<asp:GridView ID="gv_data" runat="server" AllowPaging="True" AllowSorting="True" DataSourceID="ods_list"
Esta é a configuração do controle ObjectDataSource
ObjectDataSource
1<asp:ObjectDataSource ID="ods_list" runat="server" DataObjectTypeName="BusinessModel.ProductDescription"
2 DeleteMethod="Excluir" OldValuesParameterFormatString="original_{0}" SelectMethod="Recuperar"
3 TypeName="BusinessModel.ProductDescription" UpdateMethod="Atualizar" SortParameterName="sortClause"
4 MaximumRowsParameterName = "maxRows" SelectCountMethod = "RecCount" EnablePaging = "true"
5 ConflictDetection="OverwriteChanges" ConvertNullToDBNull="false">
6 <Selecionar Parâmetros>
7 <asp:Parameter Name="query" Type="String" />
8 <asp:Parameter Name="maxRows" Type="Int32" />
9 <asp:Parameter Name="startRowIndex" Type="Int32" />
10 <asp:Parameter Name="sortClause" Type="String" />
11 </SelectParameters>
12</asp:ObjectDataSource>
Dê uma olhada nas propriedades internas, que são os parâmetros para configurar o método CRUD e o nome do método correspondente. Isso é exatamente o que implementamos na classe. Por exemplo, o método Delete é configurado aqui: DeleteMethod="Delete" e aqui está o atributo do número de registros que acabamos de mencionar: SelectCountMethod="RecCount";
Como passar os parâmetros aqui? Atributos relacionados ao sistema são passados pelo sistema, por exemplo, maxRows, startRowIndex, etc.; eles também podem ser passados por código: this.ods_list.SelectParameters["query"].DefaultValue = query