Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider

Der DbContext stellt eigentlich ein Wrapper auf den ObjectContext dar. Ich bevorzuge mittlerweile den DbContext, da dieser einige Funktionalitäten bietet, die ich beim ObjectContext vermisse. Da wären bspw. das vereinfachte Change Tracking, der Support der DataAnnotations, der veinfachte Zugriff auf dem Context-Cache über die Local-Eigenschaft und das dieser neben Code First auch mit dem EDM-Designer verwendet werden kann.

Ein Nachteil ist jedoch die fehlende Unterstützung für das Caching. Für den ObjectContext gibt es den EFCachingProvider, der seine Aufgaben relativ gut verrichtet. Über den Konstruktor im ObjectContext wird dieser aktiviert.

Nun ist der DbContext ja nichts anderes als ein Wrapper und diesen kann auch eine ObjectContext-Instanz übergeben werden. Also kam ich auf eine ganz „wilde“ Idee, um den DbContext mit einer Zusammenarbeit mit dem EFCachingProvider zu überreden. Alternativ liesse sich das auch mit dem Proxy-Pattern realisieren, aber ich gebe die Hoffnung nicht auf, dass der EFCachingProvider ein fester Bestandteil vom EF werden wird.

Mit Hilfe der mitgelieferten T4-Vorlage, die den Einsatz des DbContext für DbFirst und ModelFirst ermöglicht, lässt sich der Caching-Support sehr einfach realisieren. Die angepasste T4-Vorlage sieht so aus:


<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@
 output extension=".cs"#><#

var loader = new MetadataLoader(this);
var region = new CodeRegion(this);
var inputFile = @"SimpleModel.edmx";
var ItemCollection = loader.CreateEdmItemCollection(inputFile);

Code = new CodeGenerationTools(this);
EFTools = new MetadataTools(this);
ObjectNamespace = Code.VsNamespaceSuggestion();
ModelNamespace = loader.GetModelNamespace(inputFile);

EntityContainer container = ItemCollection.GetItems<EntityContainer>().FirstOrDefault();
if (container == null)
{
    return string.Empty;
}
#>
//------------------------------------------------------------------------------
// <auto-generated>
// <#=GetResourceString("Template_GeneratedCodeCommentLine1")#>
//
// <#=GetResourceString("Template_GeneratedCodeCommentLine2")#>
// <#=GetResourceString("Template_GeneratedCodeCommentLine3")#>
// </auto-generated>
//------------------------------------------------------------------------------

<#

if (!String.IsNullOrEmpty(ObjectNamespace))
{
#>
namespace <#=Code.EscapeNamespace(ObjectNamespace)#>
{
<#
    PushIndent(CodeRegion.GetIndent(1));
}

#>
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data.EntityClient;
using System.Data.Objects;
using System.IO;
using EFProviderWrapperToolkit;
using EFTracingProvider;
using EFCachingProvider;
using EFCachingProvider.Caching;

// Workaround, create an objectcontext for 2nd Level Cache with EFProviderToolkit
<#=Accessibility.ForType(container)#> partial class <#=Code.Escape(container)#>Context : ObjectContext
{
	private TextWriter logOutput;
	
    #region Konstruktoren
    public <#=Code.Escape(container)#>Context() 
    : base(EntityConnectionWrapperUtils.CreateEntityConnectionWithWrappers(
                    "name=<#=container.Name#>",
                    /*"EFTracingProvider",*/
                    "EFCachingProvider"
            ), "<#=container.Name#>")

	{
		
    }
	
	public <#=Code.Escape(container)#>Context(string connectionString)
            : base(EntityConnectionWrapperUtils.CreateEntityConnectionWithWrappers(
                    connectionString,
                    /*"EFTracingProvider",*/
                    "EFCachingProvider"
            ))
    {
    }
    #endregion
	
	// ObjectSets are not required, when we use the DbContext.
	
    #region Tracing Extensions

    private EFTracingConnection TracingConnection
    {
        get { return this.UnwrapConnection<EFTracingConnection>(); }
    }

    public event EventHandler<CommandExecutionEventArgs> CommandExecuting
    {
        add { this.TracingConnection.CommandExecuting += value; }
        remove { this.TracingConnection.CommandExecuting -= value; }
    }

    public event EventHandler<CommandExecutionEventArgs> CommandFinished
    {
        add { this.TracingConnection.CommandFinished += value; }
        remove { this.TracingConnection.CommandFinished -= value; }
    }

    public event EventHandler<CommandExecutionEventArgs> CommandFailed
    {
        add { this.TracingConnection.CommandFailed += value; }
        remove { this.TracingConnection.CommandFailed -= value; }
    }

    private void AppendToLog(object sender, CommandExecutionEventArgs e)
    {
        if (this.logOutput != null)
        {
            this.logOutput.WriteLine(e.ToTraceString().TrimEnd());
            this.logOutput.WriteLine();
        }
    }

    public TextWriter Log
    {
        get { return this.logOutput; }
        set
        {
            if ((this.logOutput != null) != (value != null))
            {
                if (value == null)
                {
                    CommandExecuting -= AppendToLog;
                }
                else
                {
                    CommandExecuting += AppendToLog;
                }
            }

            this.logOutput = value;
        }
    }


    #endregion

    #region Caching Extensions

    private EFCachingConnection CachingConnection
    {
        get { return this.UnwrapConnection<EFCachingConnection>(); }
    }

    public ICache Cache
    {
        get { return CachingConnection.Cache; }
        set { CachingConnection.Cache = value; }
    }

    public CachingPolicy CachingPolicy
    {
        get { return CachingConnection.CachingPolicy; }
        set { CachingConnection.CachingPolicy = value; }
    }

    #endregion
}
// Workaround ends here

// DbContext
<#=Accessibility.ForType(container)#> partial class <#=Code.Escape(container)#> : DbContext
{
	// Modification: Constructor with ObjectContext init
    public <#=Code.Escape(container)#>()
        : base(new <#=Code.Escape(container)#>Context(), true)
    {
<#
        WriteLazyLoadingEnabled(container);
#>
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

<#
    foreach (var entitySet in container.BaseEntitySets.OfType<EntitySet>())
    {
#>
    <#=Accessibility.ForReadOnlyProperty(entitySet)#> DbSet<<#=Code.Escape(entitySet.ElementType)#>> <#=Code.Escape(entitySet)#> { get; set; }
<#
    }

    foreach (var edmFunction in container.FunctionImports)
    {
        WriteFunctionImport(edmFunction, false);
    }
#>
}
<#

if (!String.IsNullOrEmpty(ObjectNamespace))
{
    PopIndent();
#>
}
<#
}
#>
<#+
string ModelNamespace { get; set; }
string ObjectNamespace { get; set; }
CodeGenerationTools Code { get; set; }
MetadataTools EFTools { get; set; }

string GetResourceString(string resourceName)
{
	if(_resourceManager == null)
	{
		_resourceManager = new System.Resources.ResourceManager("System.Data.Entity.Design", typeof(System.Data.Entity.Design.MetadataItemCollectionFactory).Assembly);
	}
	
    return _resourceManager.GetString(resourceName, null);
}
System.Resources.ResourceManager _resourceManager;

void WriteLazyLoadingEnabled(EntityContainer container)
{
   string lazyLoadingAttributeValue = null;
   var lazyLoadingAttributeName = MetadataConstants.EDM_ANNOTATION_09_02 + ":LazyLoadingEnabled";
   if(MetadataTools.TryGetStringMetadataPropertySetting(container, lazyLoadingAttributeName, out lazyLoadingAttributeValue))
   {
       bool isLazyLoading;
       if(bool.TryParse(lazyLoadingAttributeValue, out isLazyLoading) && !isLazyLoading)
       {
#>
        this.Configuration.LazyLoadingEnabled = false;
<#+
       }
   }
}

void WriteFunctionImport(EdmFunction edmFunction, bool includeMergeOption)
{
    var parameters = FunctionImportParameter.Create(edmFunction.Parameters, Code, EFTools);
    var paramList = String.Join(", ", parameters.Select(p => p.FunctionParameterType + " " + p.FunctionParameterName).ToArray());
    var returnType = edmFunction.ReturnParameter == null ? null : EFTools.GetElementType(edmFunction.ReturnParameter.TypeUsage);
    var processedReturn = returnType == null ? "int" : "ObjectResult<" + MultiSchemaEscape(returnType) + ">";

    if (includeMergeOption)
    {
        paramList = Code.StringAfter(paramList, ", ") + "MergeOption mergeOption";
    }
#>

    <#=AccessibilityAndVirtual(Accessibility.ForMethod(edmFunction))#> <#=processedReturn#> <#=Code.Escape(edmFunction)#>(<#=paramList#>)
    {
<#+
        if(returnType != null && (returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType ||
                                  returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.ComplexType))
        {
#>
        ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(typeof(<#=MultiSchemaEscape(returnType)#>).Assembly);

<#+
        }

        foreach (var parameter in parameters.Where(p => p.NeedsLocalVariable))
        {
            var isNotNull = parameter.IsNullableOfT ? parameter.FunctionParameterName + ".HasValue" : parameter.FunctionParameterName + " != null";
            var notNullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", " + parameter.FunctionParameterName + ")";
            var nullInit = "new ObjectParameter(\"" + parameter.EsqlParameterName + "\", typeof(" + parameter.RawClrTypeName + "))";
#>
        var <#=parameter.LocalVariableName#> = <#=isNotNull#> ?
            <#=notNullInit#> :
            <#=nullInit#>;

<#+
        }

        var genericArg = returnType == null ? "" : "<" + MultiSchemaEscape(returnType) + ">";
        var callParams = Code.StringBefore(", ", String.Join(", ", parameters.Select(p => p.ExecuteParameterName).ToArray()));

        if (includeMergeOption)
        {
            callParams = ", mergeOption" + callParams;
        }
#>
        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<#=genericArg#>("<#=edmFunction.Name#>"<#=callParams#>);
    }
<#+
    if(!includeMergeOption && returnType != null && returnType.EdmType.BuiltInTypeKind == BuiltInTypeKind.EntityType)
    {
        WriteFunctionImport(edmFunction, true);
    }
}

string AccessibilityAndVirtual(string accessibility)
{
    return accessibility + (accessibility != "private" ? " virtual" : "");
}

string MultiSchemaEscape(TypeUsage usage)
{
    var type = usage.EdmType as StructuralType;
    return type != null && type.NamespaceName != ModelNamespace ?
        Code.CreateFullName(Code.EscapeNamespace(type.NamespaceName), Code.Escape(type)) :
        Code.Escape(usage);
}

#>

Für den CodeFirst-Ansatz wird das Ganze schon ein wenig wilder, da das Model zur Laufzeit erstellt wird und der Metadaten-ConnectionString in dieser Form auch nicht existiert. Aber auch hier habe ich mit ein wenig „Basteln“ eine lauffähige Variante hinbekommen. Da dieser Workaround ziemlich wild ist, habe ich diesen als T4-Vorlage realisiert. Folgende Vorteile ergeben sich daraus: Der Workaround ist dokumentiert und lässt sich leichter entfernen, wenn in einer zukünftigen Version der 2nd-Level Cache endlich mal realisiert wird.

Die T4-Vorlage für den wildesten aller Workarounds ist hier:


<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ assembly name="Microsoft.CSharp" #>
<#@ assembly name="System.Data.Entity" #>
<#@ assembly name="$(ProjectDir)$(OutDir)EntityFramework.dll" #>
<#@ assembly name="$(TargetPath)" #> // in this case dll with codefirst context
<#@ import namespace="System.Data.EntityClient" #>
<#@ import namespace="System.Data.Entity.Infrastructure" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Xml" #>
<#@ include file="TemplateFileManager.CS.ttinclude" #>
<#@ include file="VsAutomationHelper.CS.ttinclude" #>
<#@ include file="ConfigurationAccessor.CS.ttinclude" #>

<# 
// ToDo: Initalize an instance of the DbContext (T4 uses connection by convention)
var contextInstance = new DbContextCodeFirst2ndLevelCache.TestContext();

// Change database connection 
// Workaround for accessing the app.config from t4 [random appdomain :-(]
ConfigurationAccessor config = new ConfigurationAccessor((IServiceProvider)this.Host);
// set the connectionstring
string cn = config.ConnectionStrings.Cast<ConnectionStringSettings>()
	.Where(c=>c.Name == contextInstance.GetType().Name).Single().ConnectionString;

contextInstance.Database.Connection.ConnectionString = cn;


string contextName = contextInstance.GetType().Name;
string contextNamespace = contextInstance.GetType().Namespace;
string contextSuffix = "OC";
var fileManager = TemplateFileManager.Create(this);

// File properties for C# output files
var compileProp = new FileProperties();
compileProp.BuildAction = BuildAction.Compile;

// File properties for EDMX output
var edmxProp = new FileProperties();
edmxProp.BuildAction = BuildAction.EntityDeploy;
edmxProp.CustomTool = "EntityModelCodeGenerator";

// Create Edmx file
fileManager.StartNewFile(String.Format("{0}.edmx", contextName)
						, fileProperties:edmxProp);

this.Write(this.GetEdmxFileFromDbContext(contextInstance));

// Create the ObjectContext with ef provider wrapper
fileManager.StartNewFile(String.Format("{0}{1}.cs", contextName, contextSuffix)
						, fileProperties:compileProp);

CreateObjectContextFromDbContext(contextName, contextNamespace, contextSuffix);


fileManager.Process(true);

#>

<#+ 

void CreateObjectContextFromDbContext(string contextName, string contextNamespace, string contextSuffix)
{
#>
namespace <#= contextNamespace #>
{
	using System;
	using System.Collections.Generic;
	using System.Configuration;
	using System.Linq;
	using System.Text;
	using System.Data;
	using System.Data.Entity;
	using System.Data.EntityClient;
	using System.Data.Objects;
	using EFProviderWrapperToolkit;
    using EFTracingProvider;
    using EFCachingProvider;
    using EFCachingProvider.Caching;
	
	public class <#= contextName #><#= contextSuffix #> : ObjectContext
	{
	
	    public <#= contextName #><#= contextSuffix #>()
        	: base (EntityConnectionWrapperUtils.CreateEntityConnectionWithWrappers(
          		TransformToMetaDataConnectionString("<#= contextName #>"),
          			/*"EFTracingProvider",*/
          			"EFCachingProvider"
          		), "<#= contextName #>")
	    {
	    }
		
		public static string TransformToMetaDataConnectionString(string contextName)
		{
		  string folderres = "Workaround."; //Subfolder of workaround with edmx
          var con = System.Configuration.ConfigurationManager.ConnectionStrings
            .Cast<ConnectionStringSettings>()
            .Where(c => c.Name == contextName)
            .Single();

          if (con == null)
          {
            throw new ArgumentException("No connection with name '{0}' found.", contextName);
          }

          var conn = new EntityConnectionStringBuilder();
          conn.ProviderConnectionString = con.ConnectionString;
          conn.Provider = con.ProviderName;
          conn.Metadata = String.Format("res://*/{1}{0}.csdl|res://*/{1}{0}.ssdl|res://*/{1}{0}.msl", contextName, folderres);
          return conn.ConnectionString;
		}
	}
}
<#+ 
}

/// <summary>
/// The code first context must already exists and compiled. Be sure that 
/// the connection string exists in the app.config and the database is created. 
/// Required for edmx file creation
/// </summary
string GetEdmxFileFromDbContext(System.Data.Entity.DbContext ctx)
{	
	string xml = String.Empty;
	
    var sw = new UTF8StringWriter();
    using (var writer = new XmlTextWriter(sw))
    {
      EdmxWriter.WriteEdmx(ctx, writer);
    }
	
    xml = sw.ToString();
    

	return xml;
}

public class UTF8StringWriter : StringWriter
{
  public override Encoding Encoding
  {
	get { return Encoding.UTF8; }
  }
}

#>

Die Beispiel-Solution kann hier heruntergeladen werden. Für die DbFirst bzw. ModelFirst-Variante muss zuerst eine Datenbank mit den Namen DbContextTest angelegt werden, dass SQL-Skript befindet sich im Verzeichnis SQL-Skripts. Der EFCachingProvider in der Solution ist modifiziert, die Anpassungen sind auch in diesem Blog beschrieben.

  •  
  • Trackback(s)
  •  
abonnement xbox live
08.02.2013
05:55
abonnement xbox live

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

Going to poukamisa.weebly.com
10.02.2013
19:27
Going to poukamisa.weebly.com

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

click through the up coming page
16.02.2013
13:16
click through the up coming page

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

abonnement xbox live gratuit
18.02.2013
09:56
abonnement xbox live gratuit

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

xbox live gold gratuit
27.02.2013
01:14
xbox live gold gratuit

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

youtube.com
09.03.2013
00:25
youtube.com

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

free xbox live codes
09.03.2013
18:06
free xbox live codes

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

free xbox live membership.get xbox live codes free
09.03.2013
20:08
free xbox live membership.get xbox live codes free

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

download microsoft word 2007 free
21.03.2013
14:37
download microsoft word 2007 free

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

labelland.com.au
22.04.2013
20:05
labelland.com.au

I was studying something else about this on another blog. Interesting. Your perspective on it is novel. If I were in this business only for the business, I wouldn\'t be in this business. Samuel Goldwyn 1882 1974...

coradji.com
24.04.2013
04:41
coradji.com

You write very detailed,Pay tribute to you.Couldn\'t be written any better. Reading this post reminds me of my old room mate! He always kept talking about this. I will forward this article to him. Pretty sure he will have a good read. Thanks for sharing!...

www.villedebeausoleil.com
24.04.2013
04:42
www.villedebeausoleil.com

Hey admin, thank you very much for providing this blog post. I found it superior. Cheers, Taj!...

www.marconifc.com
24.04.2013
04:43
www.marconifc.com

Dusti, thank you for the detailed and well thought out response! That is exactly the sort of conversation I want to see grow out of CV!...

fRTrrLWx
24.04.2013
05:37
fRTrrLWx

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

wow gold
24.04.2013
06:42
wow gold

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

burberry bags
24.04.2013
08:47
burberry bags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

seo tools
24.04.2013
09:46
seo tools

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

mulberry bags
24.04.2013
11:46
mulberry bags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

hermes bags
24.04.2013
13:48
hermes bags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

celine bags
24.04.2013
14:49
celine bags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

miu miu
24.04.2013
15:50
miu miu

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

www.terre-espoir.com
24.04.2013
18:58
www.terre-espoir.com

Fantastic blog! I genuinely love how its easy on my eyes and also the details are well written. I am wondering how I can be notified whenever a new post has been made. I have subscribed to your rss feed which must do the trick! Have a nice day!...

stanleymedicalgroup.co.uk
24.04.2013
18:58
stanleymedicalgroup.co.uk

I dont know for sure but why would you even consider dealing with them There are major firms with extremely low brokerage fees so it just doesnt make sense to put your money at risk....

centralhelensvale.com.au
24.04.2013
18:59
centralhelensvale.com.au

comment1 roudy rody piper...

www.core-mt.org.br
24.04.2013
18:59
www.core-mt.org.br

funny video )...

www.ijece.org
24.04.2013
18:59
www.ijece.org

rehearsals rwanda abcs recreation finance performance ashram fruitful awesome contd pmaustralian...

cgcc.org.au
24.04.2013
18:59
cgcc.org.au

All I can say is keep it up. This blog is so needed in a time when everybody just really wants to speak about how many persons someones cheated on their wife with. I suggest, thank you for bringing intelligence back towards the net, its been sorely miss...

taekwondoaustralia.com.au
24.04.2013
18:59
taekwondoaustralia.com.au

Thank you for the sensible critique. Me and my neighbor were just preparing to do some research about this. We got a grab a book from our local library but I think I learned more from this post. I am very glad to see such great information being shared fr...

sac louis vuitton
25.04.2013
17:31
sac louis vuitton

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

leprosymission.org.au
25.04.2013
18:49
leprosymission.org.au

In similar announcement, Nikes new slogan for Tiger Woods is Just do me....

lmypccCM
25.04.2013
19:10
lmypccCM

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

oroflex.com
01.05.2013
11:23
oroflex.com

Cheap Auto Insurance - Find Fast Low Cost Cheap Auto Insurance Today! Compare quotes on Auto Insurance and Save over 500.00 a Year! Cheap Car Insurance...

www.swimmingpool-diamond.at
01.05.2013
11:23
www.swimmingpool-diamond.at

Thanks for sharing the link, but unfortunately it seems to be down Does anybody have a mirror or another source? Please answer to my post if you do!...

planet-holidays.net
01.05.2013
11:24
planet-holidays.net

To be a adroit benign being is to have a amiable of openness to the world, an cleverness to guardianship unsure things beyond your own control, that can front you to be shattered in unequivocally outermost circumstances as which you were not to blame. Tha...

www.reynoldsgraphics.com.au
01.05.2013
11:24
www.reynoldsgraphics.com.au

I love the blog. Great post. It is very true, people must learn how to learn before they can learn. lol i know it sounds funny but its very true. . ....

louis vuitton bags
03.05.2013
15:57
louis vuitton bags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

wow gold
03.05.2013
20:33
wow gold

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

seo services
04.05.2013
02:39
seo services

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

diablo 3 gold
04.05.2013
16:15
diablo 3 gold

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

hermes bags
04.05.2013
21:27
hermes bags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

penis traction
05.05.2013
02:36
penis traction

I really enjoy looking at on this internet site , it contains excellent blog posts....

lebron 10
06.05.2013
16:48
lebron 10

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

prada bags
07.05.2013
06:43
prada bags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

coach outlet
07.05.2013
09:01
coach outlet

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

????
07.05.2013
09:01
????

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

cheap jordans
08.05.2013
02:48
cheap jordans

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

adidas
08.05.2013
16:02
adidas

I am curious to find out what blog platform you have been using? I\'m experiencing some minor security issues with my latest blog and I would like to find something more secure. Do you have any suggestions?...

??? ????
08.05.2013
17:50
??? ????

Have you ever thought about adding a little bit more than just your articles? I mean, what you say is fundamental and everything. However think of if you added some great photos or video clips to give your posts more, \"pop\"! Your content is excellent bu...

????????
08.05.2013
19:52
????????

Hi, I think your blog might be having browser compatibility issues. When I look at your website in Opera, it looks fine but when opening in Internet Explorer, it has some overlapping. I just wanted to give you a quick heads up! Other then that, great blog...

set-agentur.de
09.05.2013
17:40
set-agentur.de

I wish I could read more and more hot posts like this one about transha ha hauals! Thank you a lot and post more!...

artifela.com
09.05.2013
17:41
artifela.com

thank you for your nice post.avid mastering,...

lacoste outlet
10.05.2013
14:13
lacoste outlet

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

mulberry sale
10.05.2013
14:13
mulberry sale

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

michael kors bags
10.05.2013
14:13
michael kors bags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

coach bags
10.05.2013
20:07
coach bags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

mulberry bags
10.05.2013
20:09
mulberry bags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

baidu
10.05.2013
20:42
baidu

baidu http://www.baidu.com...

Cheap RS Gold
11.05.2013
00:36
Cheap RS Gold

This paragraph regarding Search engine optimisation is genuinely fastidious one, and the back links are actually very helpful to promote your site, its also called SEO....

replica louis vuitton purse
11.05.2013
03:39
replica louis vuitton purse

Your article databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider write very well, thank you share!...

pig
11.05.2013
04:29
pig

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

chanel handbags
11.05.2013
04:30
chanel handbags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

toms shoes outlet
11.05.2013
05:24
toms shoes outlet

If a Deal for friends is not your thing, you could set up a Deal where a customer must visit your store a certain number of times to receive a reward. You can also create a Deal in which a percentage of a customers money spent goes to a charity. Or, if yo...

michael kors outlet
11.05.2013
08:15
michael kors outlet

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

nike france
11.05.2013
08:15
nike france

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

mulberry outlet
11.05.2013
08:15
mulberry outlet

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

jeremy scott adidas
11.05.2013
08:15
jeremy scott adidas

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

www.windows7keygenerators.info
11.05.2013
08:36
www.windows7keygenerators.info

Dear admin, thnx for sharing this blog post. I observed it wonderful. Best regards, Victoria...

www.genuinewin7keys.info
11.05.2013
08:36
www.genuinewin7keys.info

Hi Site owner. My partner and i actually enjoy the particular writing and also your web page all in all! That article is actually extremely clearly composed and effortlessly understandable. The Blog theme is amazing as well! Would definitely be good to le...

Adidas Promo Codes
11.05.2013
10:55
Adidas Promo Codes

http://freedomnow.ru/afisha/item/48-nunc-malesuada-nibh.html...

Finish Line Coupon Code 2013
11.05.2013
10:55
Finish Line Coupon Code 2013

http://gleamglean.com/gallery/pix.php?pix=610...

кÑ?пиÑ?Ñ? авиабилеÑ?Ñ? в изÑ?аилÑ? из киева
11.05.2013
11:49
кÑ?пиÑ?Ñ? авиабилеÑ?Ñ? в изÑ?аилÑ? из киева

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

cheap oakley sunglasses
11.05.2013
12:26
cheap oakley sunglasses

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

cheap prom dresses
11.05.2013
12:26
cheap prom dresses

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

longchamp bags
11.05.2013
12:26
longchamp bags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

Ñ?ейÑ?Ñ? попÑ?ад
11.05.2013
12:35
Ñ?ейÑ?Ñ? попÑ?ад

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

Louis Vuitton Outlet
11.05.2013
13:35
Louis Vuitton Outlet

Rattling fantastic info is available on web site....

Louis Vuitton Outlet
11.05.2013
13:35
Louis Vuitton Outlet

Hi there mates, its enormous article concerning teachingand entirely explained, keep it up all the time....

Louis Vuitton Outlet
11.05.2013
13:35
Louis Vuitton Outlet

I blog frequently and I truly appreciate your content. The article has truly peaked my interest. I am going to book mark your blog and keep checking for new details about once a week. I opted in for your Feed too....

http://www.louisvuittonukluxury.co.uk
11.05.2013
13:36
http://www.louisvuittonukluxury.co.uk

I envy your piece of work, thankyou for all the good posts ....

Vision Direct Coupons
11.05.2013
13:37
Vision Direct Coupons

lawyers in San Diego...

Sephora Coupon Code 2013
11.05.2013
13:37
Sephora Coupon Code 2013

Recently I was searching the internet and discovered your blog. I must say, this blog is awesome. I will tell my friends straight away...

моÑ?ква кÑ?зÑ?л авиабилеÑ?Ñ?
11.05.2013
15:23
моÑ?ква кÑ?зÑ?л авиабилеÑ?Ñ?

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

минÑ?к ваÑ?Ñ?ава авиабилеÑ?Ñ?
11.05.2013
17:13
минÑ?к ваÑ?Ñ?ава авиабилеÑ?Ñ?

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

prada handbags
11.05.2013
17:39
prada handbags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

celine bags
11.05.2013
17:39
celine bags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

cheap soccer cleats
11.05.2013
18:56
cheap soccer cleats

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

cheap louis vuitton bags
11.05.2013
18:56
cheap louis vuitton bags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

cheap ray ban sunglasses
11.05.2013
18:56
cheap ray ban sunglasses

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

speedupmypc
12.05.2013
01:54
speedupmypc

how to activate uniblue speedupmypc 2013...

mulberry bags
12.05.2013
04:45
mulberry bags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

christian louboutin outlet
12.05.2013
05:50
christian louboutin outlet

Keep in mind this undoubtedly competitions everything providing people with they are simply. Monetary gain that they might be making may possibly enjoyably offering. Do not think of shoes or boots as a kind of resistance. Snags may, very well materialize,...

louis vuitton outlet
12.05.2013
07:05
louis vuitton outlet

Website woven the pup almost as well as,, You can the dog\'s full joyfulness. He or sought after others which can rotation the child frequently. You was in fact having a laugh in addition, standing tall, Like to express \"Repeat the process! Repeat, They ...

louis vuitton replica
12.05.2013
08:36
louis vuitton replica

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

louis vuitton bags
12.05.2013
11:36
louis vuitton bags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

CHEAP OAKLEY
12.05.2013
15:37
CHEAP OAKLEY

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

chaussures christian louboutin
12.05.2013
16:49
chaussures christian louboutin

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

HERMES REPLICA
13.05.2013
06:20
HERMES REPLICA

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

Nike Pas Cher
13.05.2013
06:20
Nike Pas Cher

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

CHANEL OUTLET
13.05.2013
10:20
CHANEL OUTLET

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

Celine Outlet
13.05.2013
15:45
Celine Outlet

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

code xbox live gratuit
13.05.2013
18:35
code xbox live gratuit

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

WIndows 7 Coupons
14.05.2013
01:56
WIndows 7 Coupons

Incredible Article Maki. Like Reading through copywriting Guide from Joe Sugarman or Dan Kennedy. Now I just have to apply the...

Zulily Coupon Code 2013
14.05.2013
01:57
Zulily Coupon Code 2013

To vary this I made a decision to save lots of your website to my RSS reader and Ill attempt to mention you in one in all my posts because you really deserv more readers when publishing content of this quality....

Drugstore Coupon Code
14.05.2013
02:03
Drugstore Coupon Code

Hi. I wanted to thank you for the great info youve posted on your site. I will definitelycome back to check it out once again and have subscribedto your RSS feed. Have a great day....

??? ?
14.05.2013
14:22
??? ?

I\'m really enjoying the theme/design of your web site. Do you ever run into any web browser compatibility problems? A couple of my blog audience have complained about my website not working correctly in Explorer but looks great in Firefox. Do you have an...

fitflops
14.05.2013
15:17
fitflops

Once more this steaming situation has almost chanced extinct,?? ugg Single Dad Scholarships - Being a Single Parent is not Easy, Paying for, here comes another one is kicks Apple company right where it hurts; none additional than astute and opinionated bu...

Microsoft Office Coupons
14.05.2013
18:37
Microsoft Office Coupons

Keep working, nice post! Exactly what I needed to get....

ralph lauren polo
14.05.2013
21:12
ralph lauren polo

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

FakE OaklEy EyEpatcH
15.05.2013
08:22
FakE OaklEy EyEpatcH

If you deemI do not care to set eyes on this article, the next time I am followed about your article, I think I will never again careless. Do you believe in yourself, you do not know your article can make people so enchanted....

Christian Louboutin Outlet
15.05.2013
14:49
Christian Louboutin Outlet

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

christian louboutin shoes
15.05.2013
14:49
christian louboutin shoes

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

????
16.05.2013
06:26
????

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

fitflops uk
16.05.2013
09:40
fitflops uk

? Then separate the children into two teams If you want to avoid crowds, the cold months are a good time to visit the South Rim I think it because a lot of the homeless men out on the streets choose to be there and resist any attempts to get them into she...

Louis vuitton uk
16.05.2013
10:08
Louis vuitton uk

When fitflops uk you say that you are looking for a high-quality handbag, the way that it is made will definitely spell the difference Then came individuals such as Richard Branson, Bill Gates, Muhammad Yunus and Mark Zuckerberg Despite the many benefits ...

CHRISTIAN LOUBOUTIN SALE
17.05.2013
15:38
CHRISTIAN LOUBOUTIN SALE

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

NIKE FREE RUN
17.05.2013
15:38
NIKE FREE RUN

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

Discount iphone 5
17.05.2013
15:38
Discount iphone 5

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

Cheap Oakley Sunglasses
17.05.2013
20:01
Cheap Oakley Sunglasses

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

www.paintchem.co.za
18.05.2013
02:07
www.paintchem.co.za

hey there, this might be little offtopic, but i am hosting my site on hostgator and they will suspend my hosting in 4days, so i would like to ask you which hosting do you use or recommend?...

www.iclickmedia.com
18.05.2013
02:08
www.iclickmedia.com

comment1 planning calendars...

www.easyimplant.de
18.05.2013
02:08
www.easyimplant.de

Resources just like the one you described right here will be incredibly useful with me! I will submit a website link to this page on my web site. I\'m certain my visitors will discover that extremely useful....

mgsyalitim.com
18.05.2013
02:08
mgsyalitim.com

Using an article directory is a great way to get more visitors to your read. I realize that article writing can be tiring, it definitely is worth every bit of time in which you spend writing.....

www.stellaitaliankitchen.com.au
18.05.2013
02:09
www.stellaitaliankitchen.com.au

Wonderful information, several thanks to the author....

CHEAP IPHONE 5
18.05.2013
07:45
CHEAP IPHONE 5

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

??
18.05.2013
07:45
??

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

jimmy choo shoes
18.05.2013
07:45
jimmy choo shoes

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

Sacs Louis Vuitton
18.05.2013
09:09
Sacs Louis Vuitton

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

nike air max 90 kids
18.05.2013
11:27
nike air max 90 kids

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

Cheap Ray Ban Sunglasses,fake ray ban sunglasses,Replica ray ban sunglasses
18.05.2013
13:58
Cheap Ray Ban Sunglasses,fake ray ban sunglasses,Replica ray ban sunglasses

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

Louis Vuitton Wallet
18.05.2013
14:07
Louis Vuitton Wallet

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

??????
18.05.2013
14:07
??????

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

michael kors promo code
18.05.2013
19:42
michael kors promo code

With havin so much written content do you ever run into any problems of plagorism or copyright infringement? My blog has a lot of completely unique content I\'ve either written myself or outsourced but it looks like a lot of it is popping it up all over t...

??? ???
18.05.2013
19:43
??? ???

Nice post. I was checking constantly this blog and I am impressed! Very useful info specially the last part :) I care for such info much. I was looking for this certain information for a long time. Thank you and best of luck....

Cheap Beats By Dre
18.05.2013
21:29
Cheap Beats By Dre

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

louis vuitton sacs soldes
19.05.2013
04:26
louis vuitton sacs soldes

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

PAS CHER LOUIS VUITTON
19.05.2013
09:30
PAS CHER LOUIS VUITTON

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

cheap louis vuitton handbags
19.05.2013
09:31
cheap louis vuitton handbags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

ray ban sunglasses outlet
19.05.2013
10:50
ray ban sunglasses outlet

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

chanel outlet
19.05.2013
10:50
chanel outlet

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

TRX
19.05.2013
12:49
TRX

To Prospects Who Want To become skilled at Trx Equipment But Finding it difficult to Get Rolling...

Louis vuitton Outlet online
19.05.2013
16:20
Louis vuitton Outlet online

welcome to vibram five fingers store...

michael kors uk
19.05.2013
23:47
michael kors uk

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

CHEAP LOUIS VUITTON BAGS
20.05.2013
04:44
CHEAP LOUIS VUITTON BAGS

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

Chanel Handbags
20.05.2013
04:44
Chanel Handbags

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

SACS LOUIS VUITTON
20.05.2013
04:44
SACS LOUIS VUITTON

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

christian louboutin outlet store
20.05.2013
07:36
christian louboutin outlet store

welcome to vibram five fingers store...

monster dr dre
20.05.2013
10:31
monster dr dre

databinding.net: Entity Framework - DbContext und der 2nd-Level Cache mit dem EFCachingProvider...

  •  
  • 0 Kommentar(e)
  •  

Mein Kommentar

Ich möchte über jeden weiteren Kommentar in diesem Post benachrichtigt werden.

Zurück

Translate this page

Kategorien