June 10, 2006Applied Information Sciences, Inc Leveraging.NET Attributes to build a simple Relational Object Mapping Framework Jason Fabritz Applied Information Sciences, Inc.
June 10, 2006Applied Information Sciences, Inc Attributes Describing how to Serialize Data [Serializable] [XmlElement] Describing how to Serialize Data [Serializable] [XmlElement] Security Characteristics [CodeAccessSecurity] Security Characteristics [CodeAccessSecurity] Affect the Just-in-Time (JIT) Compiler [StructLayout] [MarshalAs] Affect the Just-in-Time (JIT) Compiler [StructLayout] [MarshalAs] Code Interoperability [ComVisible] Code Interoperability [ComVisible]
June 10, 2006Applied Information Sciences, Inc Usage Example using System; using System.Xml.Serialization; [Serializable] [XmlRoot( Namespace = " IsNullable = false, ElementName = "Address" )] public class Address { [XmlAttribute( "id" )] public int Id { get; set; } [XmlElement( "Street1" )] public String Street { get; set; } [XmlElement( "City" )] public String City { get; set; } …
June 10, 2006Applied Information Sciences, Inc Rolling Your Own [AttributeUsage( AttributeTargets.Property, AllowMultiple=true )] public class SqlParameterAttribute : Attribute { public SqlParameterAttribute( String name, params String[] mode ) { //… } public bool ReturnsData { get { //… } set { //… } }
June 10, 2006Applied Information Sciences, Inc Calling a Stored Procedure public int addAddress( int personId, int type, String street, String city, String state, String zip ) { using( SqlConnection connection = new SqlConnection( connectionString ) ) { connection.Open( ); using( SqlCommand command = connection.CreateCommand( ) ) { command.CommandType = CommandType.StoredProcedure; command.CommandText = "sp_add_address"; command.Parameters.Add( SqlDbType.Int ).Value = personId; command.Parameters.Add( SqlDbType.Int ).Value = type; command.Parameters.Add( SqlDbType.NVarChar, 255 ).Value = street; command.Parameters.Add( SqlDbType.NVarChar, 32 ).Value = city; command.Parameters.Add( SqlDbType.NVarChar, 120 ).Value = state; command.Parameters.Add( SqlDbType.NVarChar, 12 ).Value = zip; return command.ExecuteNonQuery( ); }
June 10, 2006Applied Information Sciences, Inc Calling a Stored Procedure public int addAddress( Address address ) { using( SqlConnection connection = new SqlConnection( connectionString ) ) { connection.Open( ); using( SqlCommand command = connection.CreateCommand( ) ) { command.CommandType = CommandType.StoredProcedure; command.CommandText = "sp_add_address"; command.Parameters.Add( SqlDbType.Int ).Value = address.PersonId; command.Parameters.Add( SqlDbType.Int ).Value = address.AddressType; command.Parameters.Add( SqlDbType.NVarChar, 255 ).Value = address.Street; command.Parameters.Add( SqlDbType.NVarChar, 32 ).Value = address.City; command.Parameters.Add( SqlDbType.NVarChar, 120 ).Value = address.State; command.Parameters.Add( SqlDbType.NVarChar, 12 ).Value = address.ZipCode; return command.ExecuteNonQuery( ); }
June 10, 2006Applied Information Sciences, Inc Calling a Stored Procedure public int addAddress( Address address ) { using( SqlEngine engine = factory.CreateSqlEngine( ) ) { return engine.Execute( address, "add" ); }
June 10, 2006Applied Information Sciences, Inc Calling a Stored Procedure using( SqlEngine engine = factory.CreateSqlEngine( ) ) { engine.Execute( address, "add" ); }
June 10, 2006Applied Information Sciences, Inc The Big Idea public class Address { public int PersonId {...}; public int AddressType {...}; public String Street {...}; public String City {...}; public String State {...}; public String ZipCode {...}; } CREATE PROCEDURE dbo.sp_add_address NVARCHAR(12) ) AS BEGIN …
June 10, 2006Applied Information Sciences, Inc The Big Idea [SqlProcedure("sp_add_address“)] public class Address { public int PersonId {...}; public int AddressType {...}; public String Street {...}; public String City {...}; public String State {...}; public String ZipCode {...}; } CREATE PROCEDURE dbo.sp_add_address NVARCHAR(12) ) AS BEGIN …
June 10, 2006Applied Information Sciences, Inc The Big Idea public class Address { [SqlResult("person_id")] public int PersonId {...}; [SqlResult("address_type_id")] public int AddressType {...}; [SqlResult("street")] public String Street {...}; [SqlResult("city")] public String City {...}; [SqlResult("state")] public String State {...}; [SqlResult("zip")] public String ZipCode {...}; } CREATE PROCEDURE int ) AS BEGIN SELECT person_id, address_type_id, street, city, state, zip FROM address WHERE id END
June 10, 2006Applied Information Sciences, Inc Mapping Objects [SqlProcedure( "sp_add_address", "add" )] [SqlProcedure( "sp_update_address", "update" )] [SqlProcedure( "sp_delete_address", "delete" )] public class Address { [SqlResult( "id", "add", "get" )] public int Id { get; set } [SqlResult("person_id","get")] public int PersonId { get; set; } [SqlResult("street","get")] public String Street { get; set; }...
June 10, 2006Applied Information Sciences, Inc Using Mapped Objects Address address; FindAddress finder = new FindAddress( ) ; finder.AddressId = 100 ; using( SqlEngine engine = factory.CreateSqlEngine( ) ) { address = engine.Execute ( finder, "get" ) ; } … // modify address using( SqlEngine engine = factory.CreateSqlEngine( ) ) { engine.Execute( address, "update" ) ; }
June 10, 2006Applied Information Sciences, Inc CODE
June 10, 2006Applied Information Sciences, Inc Resources MSDN MSDN NUnit NUnit Applied Information Sciences, Inc. Applied Information Sciences, Inc.