Ein wirklich cooles neues Feature von Silverlight 4 ist TextTrimming. Ein Bild sagt da mehr wie 1000 Worte:

TextTrimming zeigt bei einem Überlauf eines Textes automatisch 3 Punkte an – im Gegensatz zum Beispiel ohne TextTrimming, wo das ganze einfach abgeschnitten wird.
Die Umsetzung könnte einfacher nicht sein:
<TextBlock Text="Ich bin ein langer Text" TextTrimming="WordEllipsis" Width="116" />
Mehr Verfeinerungsmöglichkeiten gibt es zwar – wie etwa bei WPF – nicht, aber immerhin.
RIA Services und Entity Framework 4 arbeiten ja eigentlich mühelos miteinander. Benutzt man aber POCO-Klassen im Entity Framework, geht dann plötzlich gar nichts mehr.

Da meckert also der Compiler “Cannot resolve ‘EntityState’”. EntityState ist ein Property, welches in der Klasse EntityObject definiert ist – welche in Nicht-Poco-Szenarien die Basisklasse aller Entities ist. Da die POCO’s natürlich nicht von dieser Klasse ableiten (und dies auch nicht tun sollen), ist hier eine Alternative gefragt.
Die ObjectContext-Instanz bietet Zugriff auf den ObjectStateManager. Mit dessen Methode “TryGetObjectStateEntry” kann man den EntityState jeder Entität herausfinden. Eine entsprechende Hilfsmethode könnte so aussehen:
private EntityState GetEntityState(object entity)
{
ObjectStateEntry stateEntry;
if (ObjectContext.ObjectStateManager.TryGetObjectStateEntry(entity, out stateEntry))
{
return stateEntry.State;
}
return EntityState.Detached;
}
Noch einfacher wirds, wenn die Entitäten eine gemeinsame Basis teilen (hier BaseEntity). Mit etwas ExtensionMethod-Magic lassen sich die notwendigen Anpassungen an der generierten Service-Klasse dann auch mit “Find and Replace” lösen:
private EntityState GetEntitySate(this EntityBase entity, ObjectStateManager stateManager)
{
ObjectStateEntry stateEntry;
if (stateManager.TryGetObjectStateEntry(entity, out stateEntry))
{
return stateEntry.State;
}
return EntityState.Detached;
}

Eigentlich etwas armselig, dass sowas überhaupt nötig ist – aber zumindest eine einigermassen komfortable Lösung.