Tips and Tricks
Hopefully if you're reading this you've noticed that I've started a series of Tips recently.
The tips will mostly apply to Entity Framework or Data Services.
Seeing as I expect to have a lots of tips, it probably makes sense to have some sort of index.
That is what this is post is, as I add a new tip I will add it to this page too.
If you have any suggested topics for tips please let me know by leaving a comment or emailing me directly at Microsoft (Alexj is my alias at Microsoft, and emails at Microsoft are in the form alias@microsoft.com)
Without further ado here are what I have so far:
Tip 55 - How to extend an IQueryable by wrapping it
Tip 54 - How to improve performance using Statement Expressions
Tip 53 - How to debug EF POCO mapping issues
Tip 52 - How to re-use Types with the Data Services client
Tip 51 - How to load EF metadata from arbitrary streams
Tip 50 - How to query a Data Service using JQuery
Tip 49 – How to find your Data Service bug
Tip 48 - How to host a Data Service in WCF
Tip 47 – How fix-up can make it hard to change relationships
Tip 46 - How to exclude a property using Code-Only
Tip 45 - How to swap EF metadata at runtime
Tip 44 – How to navigate an OData compliant service
Tip 43 – How to authenticate against a Data Service
Tip 42 – How to create a dynamic model using Code-Only
Tip 41 - How to execute T-SQL directly against the database
Tip 40 - How to materialize presentation models via L2E
Tip 39 - How to set overlapping Relationships - EF 4.0 only
Tip 38 - How to use Code Only with Astoria
Tip 37 - How to do a Conditional Include
Tip 36 – How to Construct by Query
Tip 35 – How to write OfTypeOnly<TEntity>()
Tip 34 – How to work with Updatable Views
Tip 33 – How cascade delete really works in EF
Tip 32 – How to create a database from SSDL – EF 4 only
Tip 31 – How to compose L2O and L2E queries
Tip 30 - How to use a custom database function
Tip 29 – How to avoid LazyLoad or Load() reader issues
Tip 28 - How to implement an Eager Loading Strategy
Tip 27 – How to Implement BeforeSave Validation
Tip 26 – How to avoid database queries using Stub Entities
Tip 25 – How to get Entities by key the easy way
Tip 24 – How to get the ObjectContext from an Entity
Tip 23 – How to fake Enums in EF 4
Tip 22 - How to make Include really Include
Tip 21 – How to use the Single() operator – EF 4.0 only
Tip 20 – How to deal with Fixed Length Keys
Tip 19 – How to use Optimistic Concurrency with the Entity Framework
Tip 18 – How to decide on a lifetime for your ObjectContext
Tip 17 – How to do one step updates with AttachAsModified(..)
Tip 16 – How to mimic .NET 4.0’s ObjectSet<T> today
Tip 15 - How to avoid loading unnecessary Properties
Tip 14 - How to cache Entity Framework Reference Data
Tip 13 - How to Attach an Entity the easy way
Tip 12 - How to choose an Inheritance Strategy
Tip 11 - How to avoid Relationship Span
Tip 10 - How to understand Entity Framework jargon
Tip 9 - How to delete an object without retrieving it
Tip 8 - How to write 'WHERE IN' style queries using LINQ to Entities
Tip 7 - How to fake Foreign Key Properties in .NET 3.5 SP1
Tip 6 - How and when to use eager loading
Tip 5 - How to restrict the types returned from an EF Query
Tip 4 - Conceptual Schema Definition Language Rules
Tip 3 - How to get started with T4
Tip 2 - Entity Framework Books
Tip 1 - How to sort Relationships in the Entity Framework
Enjoy.
Comments
- Anonymous
March 25, 2009
PingBack from http://www.anith.com/?p=22679 - Anonymous
April 04, 2009
Alex, I have enjoyed perusing through your tips and wanted to request a post on serialization. I recently switched from L2S to EF and now considering switching back because of serialization issues.Primarily, when using L2S, I could serialize the returned object as JSON (or XML for that matter) and get simply: { "Id":1, "Name":"John Doe" } but after switching to EF I am stuck with { "Id":1, "Name":"John Doe", "EntityState":"...", "EntityKey":"...", ... }And the work around to fetch and return objects as Anonymous: (from ... where ... select new { Id : t.Id, Name : t.Name }).First(); which is obviously undesirable because it means having to specify each field and is quite rigid by design. Any best practices or recommendations? - Anonymous
April 05, 2009
Aleem,Interesting question. I haven't really thought about this before. I'll put it on my list of possible posts.PS. Looked at your blog, you've got a lot of comment spam you should look at tidying upAlex - Anonymous
April 06, 2009
Well as it turns out the quick way around it is to return anonymous objects instead of entity objects and use projections.> philha@microsofxxxxx wrote:> The general approach we recommend is to control the object you're sending to the browser. Instead of sending the full object you grabbed from the db, you want to perhaps send a projection. For example:>> Instead of>> var product = db.Products.Single(...);> return View(product);>> You could send an anonymous object with only the fields you want...>> var product = db.Products.Single(...);> var jsonProduct = new {Name = product.Name, Price = product.Price};> return View(product);Not fond of that approach because it requires extra housekeeping (update projects if db schema or field names change and require explicitly specifying all fields). I've fallen back on EFPocoAdapter for now.Thanks for pointing out the comment spam. Haven't used that blog for years. Cleaned up and updated link. - Anonymous
April 15, 2009
The Problem: In some of earlier tips we talked about using Attach to load things into the ObjectContext - Anonymous
April 16, 2009
Aleem,I was talking to someone today who talked about a WCF interface called IExtensibleDataObject (http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iextensibledataobject.aspx) that maybe we could use in conjunction with a new T4 template, to hide away EntityKeys etc from the Entity Sent over the wire?Anyway just an idea.Alex - Anonymous
May 19, 2009
This is the 19th post in my ongoing series of Entity Framework Tips . Background: If you have a table - Anonymous
May 19, 2009
This is 20th post in my ongoing series of Entity Framework Tips . Fixed Length Field Padding: If you - Anonymous
May 20, 2009
This is 21st post in my ongoing series of Entity Framework Tips , and the first that is specific to EF - Anonymous
June 05, 2009
As of right now Enums are not in EF4. Now we will be listening to your feedback about Beta1, and making - Anonymous
June 10, 2009
Entity Framework Tips by Alex James Lately I ran into Alex James blog ( Meta Me ) and into his Entity - Anonymous
June 19, 2009
Sometimes rather than writing this: var customer = ctx.Customers.First(c => c.ID == 5); You would - Anonymous
June 19, 2009
Customers often ask how to get from an Entity back to the ObjectContext . Now generally we don’t recommend - Anonymous
June 19, 2009
As of right now Enums are not in EF4. Now we will be listening to your feedback about Beta1, and making - Anonymous
June 19, 2009
This is 22nd post in my ongoing series of Entity Framework Tips . If you want to do eager loading with - Anonymous
June 19, 2009
This is 21st post in my ongoing series of Entity Framework Tips , and the first that is specific to EF - Anonymous
June 19, 2009
This is 20th post in my ongoing series of Entity Framework Tips . Fixed Length Field Padding: If you - Anonymous
June 19, 2009
This is the 19th post in my ongoing series of Entity Framework Tips . Background: If you have a table - Anonymous
June 19, 2009
The Problem: In some of earlier tips we talked about using Attach to load things into the ObjectContext - Anonymous
July 27, 2009
Congrats for this serie of posts Alex, they're great!I'm learing a lot with them, keep up the good work.Regards! - Anonymous
September 23, 2009
To Aleem question: This is a solution starter. I did not cover navigations because of infinite recursion.public static string SerilaizeJSON(this EntityObject entity){ StringBuilder sb = new StringBuilder(200); PropertyInfo[] propertyInfos = entity.GetType().GetProperties(); Type scalarPropertyType = typeof(EdmScalarPropertyAttribute); sb.Append("{"" + entity.GetType().Name + "" : {"); foreach (PropertyInfo p in propertyInfos) { if (p.GetCustomAttributes(scalarPropertyType, false).Count > 0) { sb.AppendFormat(""{0}" : "{1}",", p.Name, p.GetValue(entity, null)); } } if (propertyInfos.Count > 0) { sb.Remove(sb.Length - 1, 1); } sb.Append("}}"); return sb.ToString();} - Anonymous
October 09, 2009
The comment has been removed - Anonymous
November 24, 2009
Hi,The tip 35 link is broken.However google < OfTypeOnly reveals this url which works.http://blogs.msdn.com/alexj/archive/2009/09/17/tip-35-how-to-write-oftypeonly-tentity.aspxCan you please correct. - Anonymous
November 24, 2009
@Blogger,Thanks for the catch!Fixed!CheersAlex - Anonymous
June 06, 2010
Nice collection of tips, but itlacks one basic example that I couldn't findanywhere (OK I didn't google/bing that much ;-)).How to save objects in many to many relationship.Let's say that there 2 tables Users (for membersof Library) and ReadBooks.Could you give me, please, a code example in c# of:a User read a book;a User read a book that was never read before, so it isn't stored in ReadBooks table.I would greatly appreciate your answer,Robert