Storing Large Binary Data (e.g. VARBINARY(MAX)) in SQL Server CE and EntityFramework

Unlike full-blown SQL Server, SQL Server CE (Compact Edition) restricts VARBINARY data types to a maximum size of roughly 8k. Fortunately, there’s an easy enough hack to get around this. According to the MSDN, SQL Server CE supports image data types up to a size of up to 1GB. Since images are just a specific binary format, they’ll work for any other binary data type. As such, all you have to do is decorate the desired model property as so:

[Column(TypeName = "image")]
public byte[] Data { get; set; }

Unfortunately, there’s also a bug with EntityFramework not properly detecting the maximum possible size for SQL Server CE. In order to get around this, you must also add the following code to your data context:

public class MyDbContext : DbContext
    public DbSet<DataClass> Data { get; set; }

    protected override bool ShouldValidateEntity(DbEntityEntry entityEntry)
        //Replace "DataClass" with the class that needs to store large data types
        if (entityEntry.Entity is DataClass)
            return false;
        return base.ShouldValidateEntity(entityEntry);

Thanks to Charles at StackOverflow and Erik for posting the solution to this frustrating problem.


How to not hardcode AspNetDevelopmentServerHost attribute when unit testing

By default, whenever you have VS2010 generate a new unit test for a web method (an MVC controller in my case), it creates a hard-linked file path in the "AspNetDevelopmentServerHost" attribute. This may work fine if you’re the sole developer and code on only one machine, but what about when you work on a team or have multiple machines that will invariably have different file structures? MS recommends using "%PathToWebRoot%", but at least in my case, it always resolves to the default Visual Studio project folder in your User directory. Thankfully, you can also use the "$(SolutionDir)" macro, which should resolve to your project directory, wherever that may be. Thanks to Jason Skowronek for that tip.


Error When Connecting to Mac OS X 10.7 Lion through VNC

Quick tip: if you’re getting errors (e.g. instant disconnect or won’t connect) when connecting to your mac through VNC, try the following:

  • Be sure to specify a password under "computer settings" on your mac.
  • Set the "color level" to full (all available colors) on your VNC client. In RealVNC, these can be found by clicking on the options button.

Thanks to Dundz at the forums.


“The property is read only” Error Using RIA Services

If you’re trying to modify the property of an object automagically generated from RIA Services within a Silverlight application and you’re getting a runtime error indicating that the the property is read only, here’s a simple fix. Simply add the attribute “[Editable(true)]” from System.ComponentModel.DataAnnotations at the top of the field that you’d like to be editable.

Is it just me or are the number of attributes needed to be placed before each property getting a little ridiculous?