Archive for Technology category

MacBook Pro 256GB SSD upgrade experience

April 9th 2010 • Apple, Hardware (, , , , ) • 14,087 views • 16 responses

I’ve been wanting an SSD for some time and last week I caved. Armed with credit card, screwdriver and trusty MacBook Pro I fitted a sweet SSD and decided to document the experience.

Choosing a drive

There are a bewildering number of options out there. Budget, as always, dictates the combination of speed and size available.

Size

You may not need as much space as you think so even if you intend on a fresh install clean-up your current drive to get an idea of requirements.

Remembering to backup before:

  1. Identify biggest culprits
    Try DaisyDisk ($19) or Disk Inventory X (free) and drill down to catch unexpected bloat in your music library, videos etc.
  2. Clean up unused system junk
    Use CleanMyMac ($30) or MonoLingual (free) to clean up logs as well as redundant processor and language support.
  3. Archive unused content
    Move those podcasts, TV shows, applications and games you aren’t going to use again to cheap external drives.
  4. Deal with orphaned & duplicate files
    Find media in your iTunes folders missing from iTunes lists and either trash or add it back then use iTune’s Display Duplicates.

If you’re prepared to sacrifice your DVD drive then you can move your existing hard drive to the optical bay via an adaptor and purchase a smaller SSD for the OS and key performance-critical files. This saves cash and gives you more space but will cost you battery life.

Speed

SSDs are not created equal and the combination of flash and controller (on drive and in your machine) play a part in defining performance. Firmware, hardware revisions, drive size and operating system can also affect the speed so do your homework.

Anandtech have in-depth coverage of SSD’s including an SSD Bench with Tom’s providing a more general SSD Buyer’s Guide. Drives come and go quickly so keep an eye on review dates and exact model numbers as manufacturers have models with similar names with difference specifications.

My choice – lightning giant

I settled on the Crucial RealSSD C300 (CTFDDAC256MAG-1G1) because of it’s blazingly fast 256GB configuration and my storage requirements were still around 150GB.

This combination doesn’t come cheap at $699 USD. My links to the Crucial web site include my affiliate code ever optimistic I’ll get a small commission on a drive or two. (I dream that one day my blog will cover it’s own hosting charges)

Some other popular alternatives

  • Intel’s X-25M G2 is well regarded and can be had for around $430 for 160GB and $210 for 80GB
  • Intel’s X-25V (for value) can be had for around $120 for 40GB
Don’t go with Apple’s factory-options for an SSD as they use slower Samsung drives and charge a premium for it which is unacceptable especially given how easy they are to replace.

Installing my SSD & Mac OS X (without a DVD drive)

The newer Unibody MacBook Pro’s hard-drives are designed to be user-replaceable and are covered in the manual.

My non-Unibody is not however those nice chaps over at iFixit have put together a hard drive replacement guide for 15” that is close enough but I have one complication. My DVD drive died which raised the question (and subsequent section)

How do I install Snow Leopard without a DVD drive?

Remote Install

Remote Install let’s you put the a DVD into a machine with a drive, run Utilities > Remote Install and follow a few steps which include holding down the alt key on the machine that doesn’t have a drive.

Unfortunately the machine wanting to boot has to be a Mac mini or a MacBook Air from 2009 or later – i.e. something Apple shipped without a DVD drive.

NetBoot

Mac’s can boot from network images however there are also obstacles here:

  1. Apple’s official Netboot server is part of Mac OS X Server and that costs $499
  2. The only unofficial server-less guide I could find is out of date  (nicl & NetInfo were deprecated in Leopard)

You will also need to create an image of the Mac OS X DVD to be able to install from.

USB image

Your USB device will require over 6.2GB to fit the image of Snow Leopard and need to be partitioned with GUID Partition Table which will wipe it. My 4GB memory stick was too small and I didn’t want to wipe my 1TB external drive so ended up using my 8GB Compact Flash card.

To get the Snow Leopard DVD copied to it:

  1. Use a Mac that has a DVD drive and insert both the install DVD and USB storage device
  2. Launch Disk Utility from the Utilities folder
  3. Select the USB storage device from the list of devices and then choose the Partition tab
  4. Choose 1 Partition from the Volume Scheme drop-down
  5. Press Options… choose GUID Partition Table then OK
  6. Press Apply to confirm you are happy to wipe away all the data on the device
  7. Select the install DVD from the list of devices and then choose the Restore tab
  8. Drag the install DVD from the list of devices into the Source text box
  9. Drag the USB storage device from the list of devices into the Destination text box
  10. Press the Restore and wait a while

When finished eject the USB device and insert it into your DVD-less Mac. Turn it on holding down alt until a boot selection screen shows and use the arrow keys and return to launch the installer from your USB device.

It may take a while for the installer screen to appear but be patient.

Press Options… from the installer to turn all off all the features you don’t need such as additional languages, printer drivers etc.

Open the Installer Log window and set Detail Level to Show All Logs to see more granular progress – useful if installing from silent media like networks or flash.

Performance over time & TRIM

A simplified primer

SSDs are fast but the flash technology suffers some limitations most importantly they can’t overwrite data without erasing it first.

In order to avoid this performance hit, and to preserve the life of the drive itself as blocks can be erased a fine number of times, SSD drives use fresh blocks for as long as they are available. Once they run out every write has to take the hit of an erase and performance can drop to traditional hard-drive speeds (or worse).

The problem arises sooner than you think because file-systems when deleting a file do not actually cause an erase but rather just de-allocate the block knowing it will get overwritten when it’s next needed so these fresh blocks decrease over time even if you drive never gets full. (Which is how file-recovery tools are able to undelete files)

This doesn’t sound too bad until you realise that when erasing a file in an operating system the file system just removes the block from it’s own list to be reused later and therefore the drive itself has no knowledge that the block can be erased until it runs out and starts honoring overwrites.

The solution

Manufacturers initially solved this problem by writing tools (for Windows) that examined the file-system structures to find out which blocks are unused so they can send ‘erase block’ commands down to the SSD drive and get your performance back – at least until you run out of blocks again.

This wasn’t a great solution so they agreed on a standard called ‘TRIM’ that lets file-systems tell the drive when blocks are no longer and can be erased in background on-demand. Support was built into Windows 7 and Linux 2.6.28 making a lot of SSD owners very happy.

Mac OS X & TRIM

Mac OS X doesn’t yet support the TRIM command although one Apple engineer confirmed they are looking at it back in October. They’re in no hurry as the SSD drives Apple ship don’t support TRIM yet.

In the mean time you might want to minimize unnecessary writes:

  1. Don’t use Finder’s Secure Empty Trash or the srm command line tool – the overwriting they did on magnetic drives doesn’t overwrite on SSD but steals up to 35x the blocks of the original!
  2. Keep large churning files on external drives (e.g. video processing)
  3. Don’t let your laptop run out of power as it copies the RAM to disk each time (2-8GB)
  4. Prevent unnecessary disk operations such as the ‘last accessed’ attribute on files (see below)
  5. Don’t keep running disk benchmarks that cause lots of writes!
Don’t be tempted to try and use one of the manufacturers Windows tools from your BootCamp partition as they only understand NTFS and FAT and won’t be able to even figure out which blocks can be erased as Mac OS X uses it’s own HFS+ file system.

Turn off last-access-time

These access times are pretty useless and indeed the iPhone also has them switched off. Create a file named noatime.plist in your /Library/LaunchDaemons path with the following contents:

<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>noatime</string>
    <key>ProgramArguments</key>
    <array>
      <string>mount</string>
      <string>-vuwo</string>
      <string>noatime</string>
      <string>/</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
  </dict>
</plist>

Thanks go to Ricardo Gameiro for that tip although his other Mac SSD tweaks of creating a RAM disk is questionable given the way Mac OS X manages memory and disabling the RAM copy-to-disk entirely and therefore losing data is more risky to me than running out of blocks early.

Do not

  • Turn off the sudden motion sensor – SSDs ignore the park head command anyway
  • Turn off HFS+ journaling – some users report odd issues and corruption

Last resort

If you do get into the situation where your write performance is suffering badly and you are prepared to spend a little time to get it back you can do the following:

  1. Ensure you have a full Time Machine backup
  2. Boot from a Linux Live CD containing a recent build of hdparm
  3. Use hdparm to perform an ATA Secure Erase
  4. Boot from your Mac OS X DVD/USB stick
  5. Choose the Utilities > Restore System From Backup menu option
  6. Point it at your Time Machine backup

You should also be able to do this with other full-system backup tools like SuperDuper but you’ll have to figure out the steps for yourself ;-)

Performance

I wish I had some better benchmarking tools but Xbench is all I have, sorry! It’s worth bearing in mind that the non-unibody MacBook Pro I have (MacBookPro3,1) is limited to 1.5GB/sec on the SATA bus (despite having an Intel ICH-8M SATA controller)

Xbench HD Test

My original performance figures with the original as-shipped 0001 firmware and Crucial’s updated 0002 firmware:

0001
Sequential
0001
Random
0002
Sequential
0002
Random
Overall 137.66 643.14 137.39 648.57
Uncached write 4K 200.40 762.30 185.92 789.45
Uncached write 256K 196.34 357.61 196.05 359.23
Uncached read 4K 67.56 1926.31 69.27 1942.94
Uncached read 256K 239.73 628.06 238.22 624.15

Thoughts

SSD is fast but given the hype I was expecting everything to be instant and it wasn’t quite there. Applications do normally launched within a single dock bounce and everything feels a lot snappier but there wasn’t the massive WOW! I was expecting – at least not yet.

There are also a few other advantages often overlooked, especially on a laptop:

  • lower power consumption
  • less weight, noise & heat
  • greater shock, dust and magnetic resistance

Here’s a table that pulls the specs compared to the 7200RPM Travestar that was previously my main drive.

Crucial RealSSD C300 256GB Hitachi Travelstar 7K320
Power consumption (W) 0.094 – 2.1 – 4.3 0.2 – 2.2 – 5.5
Weight (g) 75 110
Shock resistance (G/1.0ms) 1500 200
Noise (Bels) 0 2.8
Seek time (ms) < .1 12

Time will tell how well the machine now deals with large Aperture libraries of RAW images and Visual Studio compilations from inside Parallels and I’ll be sure to report them here.

[)amien

MacBook Pro two year check-in

January 27th 2010 • Apple (, , ) • 2,674 views • 3 responses

It’s been an interesting couple of years with nothing but a maxed-out MacBook Pro 17″ as my only home machine.

Failures

The hard drive died but time machine held my hand. At ALT.NET Seattle 2009 my backpack took a dive that left a dent in one corner. The battery was replaced and I roped GrinGod into obtaining a replacement UK-style \ key from the UK after some frantic typing.

A friend cracked the display when his keyfob sprang from his Batbelt culminating in a visit of the Apple Store in Bellevue. Ten days and $700 later got that fixed and included a bonus disconnected thermal sensor, a couple of new scratches, an extra screw to rattle around inside and a line of grease around the Apple logo.

Sticking with it

When I find myself eying the unibody I wince at the glossy ‘matt finish’ screen, the multi-touch trackpad clicks that sound like Robocop is nearby and a US keyboard that requires my pinky to hit a single-height enter key. That little pink dog won’t learn any new tricks. I’ve tried.

Still the OpenCL benchmark show the 8600M outperforming the newer 9400M and it does everything I need and at least one thing I don’t (gets hot enough to bake bread on). Short of switching the hard disk out for an SSD – I’ve ordered twice and then recalled after a Twitter volley of “no, you don’t want THAT one” – it’s here to stay for at least another year.

Applications

One thing that is always changing is the bunch of installed applications as I search for a combination that deliver a nirvana between productivity and enjoyment. Apps that perform a set of focused useful tasks with a shiny, eminently lick-able user interface, score highly.

I’ve rounded up my favourite apps before but here’s the latest specials on the menu.

CleanMyMac

This great-looking app helps reclaim wasted space making it a pre-requisite for SSD switchers.

Combining the PowerPC and foreign language code-purging of XSlimmer & TrimTheFat is also adds cache & log purging in with application uninstalls ala AppZapper etc.

Despite using XSlimmer already on my machine it was able to reclaim another 1.8GB and V2 is out soon which I hope will remove & alias duplicates given we’re not getting ZFS which had this feature (how many copies of Sparkle.framework do I have on my machine….)

Coda

This year I rewrote my blog’s WordPress theme from scratch and given the PHP requirement I found myself looking for an alternate IDE to Visual Studio. I already own TextMate but the feel of a raw text editor with bundles of extra bits feel didn’t have the gloss and usability I wanted such as fast preview, remote FTP sync etc. with a minimal of setup fuss.

I briefly toyed with Espresso during the early development cycle but Coda won me over in the end with it’s sheer simplicity and elegance plus the addition of built-in documentation for PHP was very helpful when working offline.

BetterTouchTool

Yes, when the Magic Mouse hit the street I picked one up. The idea of a mouse with trackpad multi-touch technology was appealing but a few minutes of use and no amount of twiddling would make it track  or let me configure it to take full advantage of what it should be able to do.

Until Apple sort this out BetterTouchTool is your friend letting you speed up the tracking of the Magic Mouse, or indeed your trackpad, and assign all sorts of interesting shortcuts and abilities to combinations of finger gestures.

Secrets

Mac apps tend to expose only the common options in their user interfaces but sometimes developers add some additional tweaks and settings behind the scenes that live in the Mac’s equivalent of the registry (known as “defaults“). While you can set these manually using the defaults command-line tool you still need to know the setting exists, it’s name and what options are available and so secrets exposes this.

Secrets is similar to Deeper and TinkerTool but the difference is that the secrets web site lets people add new options which then are automatically available within the installed preferences pane making them easily discoverable, searchable, applied… and occasionally undone.

Machinarium

Screenshot of the game MachinariumThis point-and-click adventure game will appeal to people who enjoyed Monkey Island although it feels more like the gorgeously submerging Beneath a Steel Sky.

The scenery is brilliantly imagined, stylistic and shows that very real lived-in cities can be beautiful especially when populated by cute robots capable of assembling themselves from their own body-parts (just like a triple 8 but infinitely cuter).

[)amien

Origins of a love affair

December 29th 2009 • Personal, Technology (, ) • 1,141 views • 6 responses

BBC Micro Computer's OwlFrom an earliest memory of a cream coloured box emblazoned with letters, mostly black – some red, came an owl proclaiming allegiance to the BBC.

This small box sat silently, patiently even, in our classroom for the best part of a year. On the few occasions our teacher was brave enough to flip the switch the machine would chirp into life with it’s two-tone beep and would state on capital white letters on a black background that it was BASIC. At this point the teacher would key-in the mythical incantation of CHAIN “” – handily jotted on a nearby note – and feed the beast a cassette tape.

Some time later the machine would announce it’s vague disappointment with the contents of the tape and be put back to sleep. One time, and one time only, I recall a screen full of bright colours masquerading as pirates looking for treasure.

I was 11.

Such a tantalising taste of computing left me hungry for more. I knew precisely two people who owned computers. One possessed a cut-down version of the BBC Micro from my classroom called the Acorn Electron and guarded it like a sacred treasure, the other was a friend and more accommodating so much so that he agreed, with little optimism, we could type my program listing into his computer.

What combination of childish scrawl, lack of understanding of programming concepts or the cobbled-together dialect of BASIC was responsible for his Texas Instruments TI-99 rejecting my program I would never know. However neither that failure nor the subsequent arrival and rapid departure of a ‘programmable’ Philips G7000 Videopac from my home would quench my thirst.

A new school year started and for me that meant a new school and new subjects the most interesting of these was named Information Technology or IT for short. I don’t recall much of these early lessons other than some exposure to word processing, videotext and a simplified geometry-base programming language for drawing shapes called Logo.

This fixed schedule held little interest to me although the machines themselves did and the teacher opened the room of fifteen or so BBC Micro’s equipped with 5.25″ floppy drives to the ever-changing line of misfits queued outside to play games. But unlike my old school a few people here actually knew a little about these machines.

Chuckie Egg and Mr. E were favourites while masochists would fire up Castle Quest, Citadel and Repton 2 despite being impossible to complete and lacking a crucial save-game option. Fewer still braved the open-ended and Elite space trading/combat game which would let you resume your position each day. Right on commander!

Games consisted of a few files passed between easily damaged 5.25″ floppy disks that students had mysteriously acquired. Remembering which file to CHAIN, *EXEC or *LOAD was a task in itself made worse by the ever-changing scene of kids and games. Now I finally had a machine to myself for a brief period each day I set about solving the first real world problem I encountered here and wanted to create something that would automatically boot and let you select a game by pressing a letter or a number.

Scouring magazines, loaning one of the few BBC BASIC programming manuals from the teacher and occasionally LISTing other people’s I came up with something that worked. Before long it had double height text, colours and some basic animation. Included in the program were some basic instructions on how to edit the program to fit the games on your own disk and it spread like wildfire.

Shortly after my father, who made gadget trading one of his hobbies, brought home a Sinclair ZX Spectrum 16KB. It was less powerful than the BBC’s at school and had to be hooked up to a television and cassette record to be of any use and had small rubber keys that were hard to type on. I played and programmed on it for hours without interruption and it finally became mine when my mother made it clear to my father it couldn’t be traded out for the next gadget. Within a few months the machine had died after something metallic got in through the edge connector.

I was heartbroken but found a neighbour was selling his Spectrum 48K and persuaded my parents to buy it. The extra memory was useful but even better was the hard-key keyboard and the original Sinclair BASIC programming manual I’d been missing. That year my parents split, my father moved out and we moved to a new parish on our little island of Guernsey which meant new friends and a new school. A school that had IT sharing lessons with technical drawing.

My hopes weren’t high…

[)amien

First impressions of Snow Leopard

August 29th 2009 • Apple (, , ) • 2,673 views • 6 responses

I came home from work today to find my family pack upgrade version of Snow Leopard. It’s been a few hours, so here are impressions so far.

Packaging & installation

The packaging was very small and lightweight and eco-friendly compared to the big-plastic-box-monsters that come out of Redmond.

Installation went mostly smoothly apart from an abort-and-restart that seems to have been caused by my DVD drive flaking out on me. It’s been trouble since it came back from the Apple Store.

I had to run the separate Xcode installer to update that – it wasn’t automatically detected – which left me wondering if I need to manually install anything from the optional installs or not. Running Xcode before updating it not only failed to launch but left a background process I had to force quit with Actitity Monitor to let the installer upgrade it.

The less-is-more-approach followed through to disk space which freed up another 10.5 GB – impressive given that I had purged all the non-English language resources already using Monolingual and I elected to re-install the Rossetta PowerPC binary support.

Noticeable changes

Despite being an optimization release Apple squeezed a few features in to sweeten the deal the majority of which are documented at their site and in proper reviews. The ones I’ve encountered so far are:

Location services, detect time-zone

Screenshot of location aware time-zone in Snow LeopardGreat for travelling users like myself, it found my nearest city instantly.

AirPort status in menu bar

Pop-up menu now shows signal strength of all other networks. (Hold down alt when popping up this menu to see detailed connection stats)

Smoothing options

Gone are the Automatic, light, medium and strong options replaced with a single “Use LCD font smoothing when available” option that isn’t too good at detecting third-party displays but you can activate the old hidden options.

Subpixel quality

The rendering just looks plain wrong when booting. It has that awful colour-fringe that you see from time to time, the cause of which seems to be related to the default gamma (the curve on which digital colours become analogue levels) on Mac OS X changing from 1.8 to the PC compatible 2.2.

It seems however that the sub-pixel rendering algorithms haven’t been updated to correct this. There is absolutely no point in posting a screenshot as either your browser, screen or OS would make it appear different to how it did here.

Help is at hand though, you can head into the ColorSync Utility in your Applications folder and calibrate your display – just follow the instructions and set the gamma back to 1.8. It’s worth turning on “Expert” mode and spending a few minutes setting it up properly though.

Unable to open NIBs

No compiled nibs error in Snow LeopardI used to love opening up other people’s NIB files. You could in theory create your own customised versions of an applications interface. Localise it for yourself. Maybe even create a UK English version where Colour is spelt correctly.

No more.

Whether this was to save space or to prevent such hacking is anyone’s guess.

Compatibility woes

So far I’ve had a couple of things break:

  • Cyberduck quits on launch – beta replacement is out
  • Xbox 360 controller extension (I don’t use it anymore anyway)
  • iStat Menus fails to launch – I need this to replace menu time with timezones and a drop-down calendar

Features I was expecting

Given the lean-and-mean plus sensible small refinements I was expecting…

  1. Login Window keyboard shortcut – come on, seriously, with the secrecy at Apple surely you need this too?
  2. Uninstaller – AWOL since the transition from OpenStep to NextStep and sorely needed
  3. Language purging – I still don’t want French etc. on my laptop, odd omission given the reduction goals
  4. System update framework – Other apps could use this too you know guys – and put clever delta’ing support in
  5. Grab – STILL only saves in TIFF format. So I save it there, load into preview then into PNG. WTF??
  6. Safari – should have an option to force new windows to open in a new tab

I’d also love to see being able to pin documents to their dock icon and being able to push a window to an edge to tile like as these were two features I found useful in Windows 7. Talking of which when you hold the mouse button down on a dock icon it greys everything else out for a truly UAC-like moment every time you want to quit an app from the dock…

The Menlo font

Menlo and Vera Sans Mono overlaid for comparisonApple needed to replace the ageing Monaco as it has poor international unicode support, has just a single style and poor hinting (it uses embedded bitmaps to look good without anti-aliasing in Terminal).

Given Steve Job’s apparently love of typography would they commission a gorgeous new monospaced font as Microsoft did with Consolas? No.

In 2003 Bitstream released the family Bitstream Vera under a free licence which included a great Sans Mono with bolt, italic and bold-italic variants. It even has some capable hinting so looks pretty good without anti-aliasing although could do with a few delta’s to clean that up. While it was short on the unicode support several forks filled in the gaps such as Deja Vu and Apple took Vera Sans Mono, grabbed some of these additions (adding 2900 glyphs) and tweaked some of the existing ones. Specifically they moved the vertical bar up on EBH, widened MN, shifted il, changed 0 from dotted to crossed and move/resized punctation then packed it up in a True Type Collection file that stores multiple TTF’s in a single file.

While these changes themselves look quite good – it seems they were optimizing for 14 point – in the process they destroyed the hinting for these glyphs despite the tiny amount of change made.
Menlo on Windows in NotepadMenlo on Mac OS X in TextMate
Spot which ones Apple modified on these screenshots (curiously Windows refuses to use the TTC file as it believes it is corrupt).

Screenshot of Terminal preferences showing anti-aliasing forced for MenloApple is obviously aware it’s not a good job as the option to turn off anti-aliasing in Terminal when using Menlo is curiously disabled – this seems to be something hard-coded into Terminal.app as it doesn’t affect TextMate.

Boot Camp

Installation here was a little tricky as initially the installer told me that Boot Camp 64-bit was not supported on my computer model.

Whether they don’t support 64-bit Windows on a late 2007 MacBook Pro 17″ (MacBookPro3,1) or whether it was complaining about Windows 7 isn’t clear as there are no Windows 7 specific drivers on the disk.

All is not lost however as if you navigate into Boot Camp\Drivers\Apple folder you can run the BootCamp.msi or BootCamp64.msi from there and it does not seem to perform the check. All the drivers installed without complaint and the trackpad, mouse, audio etc. is working just fine.

[)amien

LINQ to SQL changes in .NET 4.0

June 1st 2009 • .NET, Microsoft () • 43,544 views • 83 responses

People have been asking via Twitter and the LINQ to SQL forums so here’s a list I put together on a number of the changes made for 4.0.

25 Aug 2009 – Updated with additional changes, some of which are new in beta 2.

Change list

Performance

  • Query plans are reused more often by specifically defining text parameter lengths (when connecting to SQL 2005 or later)
  • Identity cache lookups for primary key with single result now includes query.Where(predicate).Single/SingleOrDefault/First/FirstOrDefault
  • Reduced query execution overhead when DataLoadOptions specified (cache lookup considers DataLoadOptions value equivalency)

Usability

  • ITable<T> interface for additional mocking possibilities
  • Contains with enums automatically casts to int or string depending on column type
  • Associations can now specify non-primary-key columns on the other end of the association for updates
  • Support list initialization syntax for queries
  • LinqDataSource now supports inherited entities
  • LinqDataSource support for ASP.NET query extenders added

Query stability

  • Contains now detects self-referencing IQueryable and doesn’t cause a stack overflow
  • Skip(0) no longer prevents eager loading
  • GetCommand operates within SQL Compact transactions
  • Exposing Link<T> on a property/field is detected and reported correctly
  • Compiled queries now correctly detect a change in mapping source and throw
  • String.StartsWith, EndsWith and Contains now correctly handles ~ in the search string (regular & compiled queries)
  • Now detects multiple active result sets (MARS) better
  • Associations are properly created between entities when using eager loading with Table-Valued Functions (TVFs)
  • Queries that contain sub-queries with scalar projections now work better

Update stability

  • SubmitChanges no longer silently consumes transaction rollback exceptions
  • SubmitChanges deals with timestamps in a change conflict scenario properly
  • IsDbGenerated now honors renamed properties that don’t match underlying column name
  • Server-generated columns and SQL replication/triggers now work instead of throwing SQL exception
  • Improved binding support with the MVC model binder

General stability

  • Binary types equate correctly after deserialization
  • EntitySet.ListChanged fired when adding items to an unloaded entity set
  • Dispose our connections upon context disposal (ones passed in are untouched)

Database  control

  • DeleteDatabase no longer fails with case-sensitive database servers

SQL Metal

  • Foreign key property setter now checks all affected associations not just the first
  • Improved error handling when primary key type not supported
  • Now skips stored procedures containing table-valued parameters instead of aborting process
  • Can now be used against connections that use AttachDbFilename syntax
  • No longer crashes when unexpected data types are encountered

LINQ to SQL class designer

  • Now handles a single anonymously named column in SQL result set
  • Improved error message for associations to nullable unique columns
  • No longer fails when using clauses are added to the partial user class
  • VarChar(1) now correctly maps to string and not char
  • Decimal precision and scale are now emitted correctly in the DbType attributes for stored procedures & computed columns
  • Foreign key changes will be picked up when bringing tables back into the designer without a restart
  • Can edit the return value type of unidentified stored procedure types
  • Stored procedure generated classes do not localize the word “Result” in the class name
  • Opening a DBML file no longer causes it to be checked out of source control
  • Changing a FK for a table and re-dragging it to the designer surface will show new FK’s

Code generation (SQL Metal + LINQ to SQL class designer)

  • Stored procedures using original values now compiles when the entity and context namespaces differ
  • Virtual internal now generates correct syntax
  • Mapping attributes are now fully qualified to prevent conflicts with user types
  • KnownTypeAttributes are now emitted for DataContractSerializer with inheritance
  • Delay-loaded foreign keys now have the correct, compilable, code generated
  • Using stored procedures with concurrency no longer gets confused if entities in different namespace to context
  • ForeignKeyReferenceAlreadyHasValueException is now thrown if any association is loaded not just the first

Potentially breaking changes

We worked very hard to avoid breaking changes but of course any potential bug fix is a breaking change if your application was depending on the wrong behavior. The ones I specifically want to call out are:

Skip(0) is no longer a no-op

The special-casing of 0 for Skip to be a no-op was causing some subtle issues such as eager loading to fail and we took the decision to stop special casing this. This means if you had syntax that was invalid for a Skip greater than 0 it will now also be invalid for skip with a 0. This makes more sense and means your app would break on the first page now instead of subtlety breaking on the second page. Fail fast :)

ForeignKeyReferenceAlreadyHasValue exception

If you are getting this exception where you weren’t previously it means you have an underlying foreign key with multiple associations based on it and you are trying to change the underlying foreign key even though we have associations loaded.Best thing to do here is to set the associations themselves and if you can’t do that make sure they aren’t loaded when you want to set the foreign key to avoid inconsistencies.

[)amien