Tuesday, 20 September 2011

Change the default Check-in Action of Visual Studio 2010

Changing the default check-in Action should be fairly simple, an option under Source Control, but it's not. In order to accomplish that, you have to change a registry key...


change @ResolveAsDefaultCheckinAction to 'False'

from Stack Overflow answer

Wednesday, 31 March 2010

ObjectQuery Include Extension

I was tired of using string to include a relation with Linq to Entities like
So I decided to write an extension that would enable to use an expression like
contexte.Users.Include(u => u.Roles)
so here is the code:
    public static class ObjectQueryExtensions
public static ObjectQuery<TEntity> Include<TEntity, TProperty>(this ObjectQuery<TEntity> query, Expression<Func<TEntity, TProperty>> expression) where TEntity : class
string name = expression.GetPropertyName();
return query.Include(name);
and you also need this:
    public static class ExpressionExtensions
public static string GetPropertyName<TObject, TProperty>(this Expression<Func<TObject, TProperty>> expression) where TObject : class
if (expression.Body.NodeType == ExpressionType.Call)
MethodCallExpression methodCallExpression = (MethodCallExpression)expression.Body;
string name = ExpressionExtensions.GetPropertyName(methodCallExpression);
return name.Substring(expression.Parameters[0].Name.Length + 1);
return expression.Body.ToString().Substring(expression.Parameters[0].Name.Length + 1);

private static string GetPropertyName(MethodCallExpression expression)
MethodCallExpression methodCallExpression = expression.Object as MethodCallExpression;
if (methodCallExpression != null)
return GetPropertyName(methodCallExpression);
return expression.Object.ToString();

Monday, 8 February 2010

DisplayNameAttribute Localized

So here is a simple Attribute, extending the DisplayNameAttribute, inspired from a post on stackoverflow

using System;
using System.Linq;
using System.ComponentModel;
using System.Reflection;
using System.Resources;

namespace MvcExtensions.Attributes
[AttributeUsage(AttributeTargets.Property AttributeTargets.Field, AllowMultiple = false)]
public class DisplayNameLocalizedAttribute : DisplayNameAttribute
public DisplayNameLocalizedAttribute(Type resourceType, string resourceKey)
: base(LookupResource(resourceType, resourceKey)) { }

internal static string LookupResource(Type resourceType, string resourceKey)
PropertyInfo property = resourceType.GetProperties().FirstOrDefault(p => p.PropertyType == typeof(System.Resources.ResourceManager));
if (property != null)
return ((ResourceManager)property.GetValue(null, null)).GetString(resourceKey);
return resourceKey;

An I use it simply like this:

using MvcExtensions.Attributes;
using MyMvc2Rc2TestApp.App_LocalResources;

namespace MyTestMVC2App.Areas.UserManagement.Models
public class User
[DisplayNameLocalized(typeof(DisplayName), "User_UserName")]
public string UserName { get; set; }
[DisplayNameLocalized(typeof(DisplayName), "User_Password")]
public string Password { get; set; }
[DisplayNameLocalized(typeof(DisplayName), "User_FirstName")]
public string FirstName { get; set; }
[DisplayNameLocalized(typeof(DisplayName), "User_LastName")]
public string LastName { get; set; }
[DisplayNameLocalized(typeof(DisplayName), "User_Email")]
public string Email { get; set; }

I have a DisplayName.resx file in App_LocalResources, it is an Embedded Resource with Public Access Modifier