<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Websiteudvikler &#187; Microsoft .NET</title>
	<atom:link href="http://websiteudvikler.dk/post/category/microsoft-net/feed" rel="self" type="application/rss+xml" />
	<link>http://websiteudvikler.dk</link>
	<description>website development, CMS, e-commerce, data integration and web analytics</description>
	<lastBuildDate>Fri, 11 May 2012 19:53:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Spar tid med Custom Attributes i dine klasser</title>
		<link>http://websiteudvikler.dk/post/spar-tid-med-custom-attributes-i-dine-klasser.html</link>
		<comments>http://websiteudvikler.dk/post/spar-tid-med-custom-attributes-i-dine-klasser.html#comments</comments>
		<pubDate>Fri, 20 Apr 2012 21:43:51 +0000</pubDate>
		<dc:creator>Kevin Steffer</dc:creator>
				<category><![CDATA[Microsoft .NET]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Optimering]]></category>

		<guid isPermaLink="false">http://websiteudvikler.dk/?p=685</guid>
		<description><![CDATA[Giv dine kunder en bedre pris for dit arbejde på database INSERT og UPDATES med mit lille trick som er beskrevet her.]]></description>
			<content:encoded><![CDATA[<p>Jeg har haft fornøjelsen af, at arbejde lidt med .NET op mod en MySQL database, hvor jeg ikke kunne bruge LinqToSQL.</p>
<p>Jeg har så i et andet projekt arbejdet med at have mine egne Custom Attributes på klasser og i det her projekt var det helt vild oplagt at bruge til at mappe databasens feltnavne op på klassernes properties.</p>
<p>Eksempel:</p>
<p>Klassen</p>
<pre>
public class Person {
  public string Name { get; set; }

  public Person() {

  }
}
</pre>
<p>Klassen med Custom Attribute</p>
<pre>
public class Person {
  [DbFieldName("name")]
  public string Name { get; set; }

  public Person() {

  }
}
</pre>
<p>Min egen attribute klasse</p>
<pre>
[System.AttributeUsage(System.AttributeTargets.Property)]
public class DbFieldName : System.Attribute
{
  private string name;
  public double version;

  public DbFieldName(string name)
  {
    this.name = name;
    version = 1.0;
  }

  public string GetName()
  {
    return (this.name);
  }
}
</pre>
<p>Pointen med Attributes er at du nøjes med at sætte dem på de Properties der skal gemmes i databasen, så når du skal lave din INSERT eller UPDATE så kører du lige sådan en stump kode her:<br />
Jeg sender en instans a Person &#8220;objPerson&#8221; ind til metoden med denne kode</p>
<pre>
cmd.CommandText = "INSERT INTO Contacts(name) VALUES(?name);";
PropertyInfo[] properties = typeof(Person).GetProperties();
foreach (PropertyInfo property in properties)
{
  DbFieldName attr = property.GetCustomAttributes(typeof(DbFieldName), false).FirstOrDefault() as DbFieldName;
  if (attr != null)
  {
    string name = attr.GetName();

    IDbDataParameter param = cmd.CreateParameter();
    param.ParameterName = string.Format("?{0}",name);
    param.Value = property.GetValue(objPerson, null);
    cmd.Parameters.Add(param);
  }
}
cmd.ExecuteNonQuery();
</pre>
<p>Det er selvfølgelig lidt overkill at skrive sådan for at gemme én værdi i database tabellen, men jeg sad med tabeller med godt 20 felter og da jeg havde 6 klasser af denne type &#8211; så sparede jeg godt med tid og kunne give kunden en god pris for mit arbejde!</p>
<p>I et større projekt ville det give mening, at lave en klasse til at håndtere alle disse klasser Save og Get metoder ved at lave en generisk klasse på typen T.</p>
<p>Håber du får chance for at gøre en kunde glad med min inspiration her.</p>
]]></content:encoded>
			<wfw:commentRss>http://websiteudvikler.dk/post/spar-tid-med-custom-attributes-i-dine-klasser.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

