Programming Entity Framework

Errata for Programming Entity Framework

Submit your own errata for this product.


The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.

Color Key: Serious Technical Mistake Minor Technical Mistake Language or formatting error Typo Question Note Update



Version Location Description Submitted By Date Submitted Date Corrected
Printed
Page Cover
Cover

The cover needs to have "Foreword by Chris Sells" on it.

Anonymous  Sep 17, 2010  Nov 01, 2010
Printed
Page xxxiv
3rd paragraph after "Acknowledgements" header

The last sentence of the 3rd paragraph says : "K. Scott Alle- nand Imar Spaanjaars, both ASP.NET gurus, ..." The automatic syllable splitting across lines was confused by the absense of a space between "Allen" and "and". It should be : "K. Scott Allen and Imar Spaanjaars, both ASP.NET gurus, ..."

Note from the Author or Editor:
please be sure it's K.Scott Allen and Imar

None  Sep 06, 2010  Nov 01, 2010
Printed
Page xxxi
2nd paragraph under heading "What You Need to Use This Book"

The 2nd-to-last paragraph says "...although the Entity Framework runtime will recognize versions 2000, 2005, and 2008, NONE (my emphasis) of the design tools will NOT (my emphasis) work with SQL Server 2000." I'm sure the error here ISN'T a double negative. Rather, (I believe) the intended statement is that "none of the design tools will work with SQL Server 2000."

Note from the Author or Editor:
although the Entity Framework runtime will recognize versions 2000, 2005, and 2008, the design tools will not work with SQL Server 2000.

None  Sep 02, 2010  Nov 01, 2010
Printed, PDF
Page 5
2nd paragraph

In the 2nd paragraph it reads: Now imagine that you can write a LINQ query that looks like this: from p in People.OfType<SalesPerson> select p However, according to the EDM presented on page 4, Figure 1-2, the query has 2 problems: 1. There is no "People", the EntitySet name would be "Persons" 2. The brackets are missing on the OfType method. So, it should be read as: from p in Persons.OfType<SalesPerson>() select p

Note from the Author or Editor:
please add the open/close parens as follows. Do *not* make the suggested change to "Persons". from p in People.OfType<SalesPerson>() select p

Morteza Manavi-Parast  Oct 11, 2010  Nov 01, 2010
Printed
Page 25
Note, 2nd paragraph up from the bottom

The note begins : "Notice that the entity has both a scalar property ...". The model under discussion has three entities. It would be less ambiguous to say : "Notice that the ADDRESS entity has both a scalar property ..."

Note from the Author or Editor:
this is in the note...change Notice that the entity has both... to Notice that the Address entity has both ...

None  Sep 11, 2010  Nov 01, 2010
Printed
Page 47
2nd paragraph

Typo: "For now, remember that the view comes into the model as an entity and if the view is not UPDATABALE..." It should say "updatable"

Note from the Author or Editor:
fix typos: updatabale to updatable

None  Jul 13, 2011  Aug 12, 2011
Printed, PDF
Page 61
3rd Line From the Top

On the 3rd line from the top it reads: "...Be sure to reference the appropriate namespaces at the top of your code files with *Include* for Visual Basic and using for C#..." However, "Imports" Statement does import namespaces in Visual Basic. So it should be read as: "...Be sure to reference the appropriate namespaces at the top of your code files with *Imports* for Visual Basic and using for C#..."

Note from the Author or Editor:
yes PLEASE replace "Include" with "Imports"

Morteza Manavi-Parast  Oct 13, 2010  Nov 01, 2010
PDF, Other Digital Version
Page 65
Example 3-8

The OrderBy statement generates an EntitySqlException because "con.lastname" cannot be resolved in the current scope or context. Changing the OrderBy to "it.lastname" works just fine. The Where statement does function properly using "con.FirstName = 'Robert'". The problem only exists in the OrderBy portion.

Note from the Author or Editor:
Remove the last line of code (with the orderby) and place a semi-colon after the end of the previous line. contactsQuery.Where("con.FirstName = 'Robert'");

None  Sep 01, 2010  Nov 01, 2010
Printed, PDF
Page 67
1st Line on the 2nd paragraph

It reads: "...both IObjectSet and ObjectQuery implement IQueryable (as well as other interfaces)" Technically this is not a correct statement since IObjectSet is an interface and an interface cannot implement another interface, it just can inherit from another interface. So we can't really use the term "both implements IQueryable" when the "both" refers to an interface (IObjectSet) and a class(ObjectQuery). I would suggest to change this line to instead read as either: "IObjectSet inherits from IQueryable and ObjectQuery actually implements IQueryable" Or "IObjectSet extends IQueryable and ObjectQuery actually implements IQueryable"

Note from the Author or Editor:
please use this modification: "IObjectSet extends IQueryable and ObjectQuery actually implements IQueryable"

Morteza Manavi-Parast  Oct 14, 2010  Nov 01, 2010
Printed
Page 68
2nd para

..,which implements DbDataReader should be inherits from DbDataReader

Note from the Author or Editor:
yes, please fix

Kurt Andersson  Dec 05, 2010  Aug 12, 2011
Printed
Page 68
Top sentence on page

Staring from page 67, the sentence reads : "An IEnumerable allows you to enumerate or iterate through each item in the collection as you did in the PRECEEDING code sample (i.e., in foreach)," Examples 3-2 through 3-8 build upon Example 3-1 on page 50. The PRECEEDING code sample (excluding the declaration in Example 3-9, pg. 67) is Example 3-8 on pg. 65. Since you refer to the "foreach", perhaps you should explicitly say : "... in Example 3-1 (i.e., in foreach)."

Note from the Author or Editor:
change sentence to read: An IEnumerable allows you to enumerate or iterate through each item in the collection as you did in the foreach code block in Example 3-1."

None  Sep 20, 2010  Nov 01, 2010
Printed
Page 69
ex. 3-10

why do do conn.Close() when you do CommandBehavoiour.CloseConnection ?

Note from the Author or Editor:
Please remove "conn.Close();" from Example 3-10. (Acch - they were both there because we added the commandbehavior late in the editing after I realized that you could combine multiple commandbehaviors in the ExecuteReader command. Forgot to remove the Close at the same time.)

Kurt Andersson  Dec 05, 2010  Aug 12, 2011
Printed
Page 69
Example 3-10

Step 1 instructs the reader to add System.Data.EntityClient declaration, but the code does not work unless System.Data is added. Without System.Data, Visual Studio gives me an error on lines 33 and 34, "The name 'CommandBehavior' does not exist in the current context.

Note from the Author or Editor:
yes! Thanks. Scott can you modify to add the line "using System.Data" towards the top of the page? 1. Add the following namespace declarations to the beginning of the code file: using System.Data; using System.Data.EntityClient;

Del  Nov 04, 2010  Nov 01, 2010
Printed
Page 73
Bottom paragraph, first sentence

The first sentence states : "If you are using SQL Server Developer or later, you can watch SQL Profiler" The year/version of (Microsoft) SQL Server was left out. Did you mean 2000, 2005, 2008, or 2008 R2? Instead or "later", did you mean a higher(-level) version of SQL Server, such as Enterprise, etc. ? Goodling for "SQL Profiler" shows that SQL Server 2000 had SQL Profiler.

Note from the Author or Editor:
modify paragraph: "If you are using SQL Server (Developer or higher version), you can watch SQL Profiler. Visual Studio 2010 Ultimate's new IntelliTrace feature will expose the queries and updates to the database. However, IntelliTrace will not display parameter values. There are also third party tools such as EFProf from Hibernating Rhinos and the Query Profiler from Huagati." Please retain EFProf link (www.efprof.com) and add link for "Query Profiler" ... http://huagati.com/L2SProfiler/

None  Sep 21, 2010  Nov 01, 2010
Printed
Page 80
Bottom paragraph, first sentence

The first sentence states : "The sidebar "Wrapping Your Head Around Lambdas" on page 62 includes a link to an article by Anders Hejlsberg." The article referenced, at : http://msdn.microsoft.com/en-us/magazine/cc163400.aspx , is by Anson Horton, which is correctly stated in the sidebar on page 62.

Note from the Author or Editor:
please change Anders Hejlsberg to Anson Horton

None  Sep 21, 2010  Nov 01, 2010
Printed
Page 84
4th paragraph of "Using Navigations in Queries", 3rd sentence

This isn't truly a typo, but rather a suggestion for more explicit language. The 3rd sentence states : "Contact to Addresses is a one-to-many relationship and Addresses is a collection, not a single entity." I think it would be more explicit to say : "... and Addresses is a collection Of Entities , not a single entity."

Note from the Author or Editor:
change to... " and Addresses is a collection of Address entities, not a single entity."

None  Sep 22, 2010  Nov 01, 2010
Printed
Page 87
Last paragraph, first sentence

The first sentence states : "the anonymous type that is returned has the properties FirstName and LastName, along with a collection of anonymous types with Street and City properties." The name of the Street property (of the anonymous type) is incorrect. The property "Street1" was retrieved. The model in Figure 2-3 of page 24 shows that the Address entity has "Street1" and "Street2" properties, but a "Street" property. The first sentence should state : ... along with a collection of anonymous types with Street1 and City properties."

Note from the Author or Editor:
please change "Street" to "Street1" in referenced sentence.

None  Sep 22, 2010  Nov 01, 2010
Printed, PDF
Page 91
Example 4-19

In example 4-19, the semi-colon should be after the closing brace.

Note from the Author or Editor:
good catch! remove the semi-colon that is at the end of the last code line (ends with oa.StateProvince;) and add a semi-colon after the very lst closing brace (next line down)

Mark Ketter  Dec 17, 2010  Aug 12, 2011
PDF, Other Digital Version
Page 91
Example 4-19

The second selected item is written as: a.LastName It should be: oa.LastName

Note from the Author or Editor:
yes, please make this fix in the 2nd line of example 4-19

None  Sep 02, 2010  Nov 01, 2010
Printed
Page 96
example 4-28

In the VB version of example 4-28 add.Contact.FirstName should be a.Contact.FirstName

maria  Feb 26, 2011  Aug 12, 2011
PDF
Page 99
Example 4-30

Re this C# statement: var contactGraphs = from c in Contacts select new{c, c.Addresses.Where (a => a.CountryRegion = "UK")}; There's two problems: 1. Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access. 2. Cannot convert lambda expression to type 'string' because it is not a delegate type. ( = "UK") This C# statement corrects both problems. var contactGraphs = from c in Contacts select new{c, MyAddresses = c.Addresses.Where (a => a.CountryRegion == "UK")};

Note from the Author or Editor:
Please make the suggested change. Note that the differnece is the addition of "MyAddresses = "

Geoff Brown  Oct 20, 2010  Nov 01, 2010
PDF
Page 126
just after Entity SQL Rules header

Change: "Use SELECT VALUE when projecting more than one type." to "Use SELECT when projecting more than one type. Do not include the VALUE keyword." Change: "When querying with SELECT, the ObjectQuery type must be a DbDataRecord." to "When querying with SELECT (without the VALUE keyword), the ObjectQuery type must be a DbDataRecord."

Julia Lerman
Julia Lerman
O'Reilly Author 
Nov 01, 2010  Nov 01, 2010
Printed
Page 151
Middle of the paragraph following Figure 7-5

This sentence is only partially correct: "If the update or delete stored procedure requests the rowversion as a parameter, you can force the original value to be used by checking the Use Original Value option". The Use Original Value option is available for an update stored procedure, but not for a delete stored procedure

Note from the Author or Editor:
Change to: If the update stored procedure requests the rowversion as a parameter, you can force the original value to be used by checking the Use Original Value option.

Maria Rutgers  Feb 13, 2011  Aug 12, 2011
PDF
Page 158
2nd code example right above "Using Imported Functions"

The FunctionImportName should be "GetContactsbyState" rather than "ContactsbyState"

Note from the Author or Editor:
please change as per submission

Chang-Ping Hsiao  Jul 11, 2011  Aug 12, 2011
Printed, PDF
Page 173
top of page

Regarding the Customers table listed in Chapter 8 page 173; CustomerTypeID has been truncated to CustomerType, Notes and RowVersion are not included.

Note from the Author or Editor:
will email a new copy of figure 8-3.tif

Mark Ketter  Jun 11, 2011  Aug 12, 2011
PDF
Page 177
2nd paragraph in 'SQL Server Confusion...' box

The hyperlink to the MSDN documentation for the timestamp/rowversion definition seems to include the '):' at the end of the line. It should just be up to the '.aspx'.

Note from the Author or Editor:
this sounds familiar. maybe a duplicate.

MartinC  Jan 01, 2012 
PDF
Page 191
Numbered list at bottom of page

You won't find the BreakAwayModel assembly if you don't build the project first. I don't think you're explicitly told to do this.

Note from the Author or Editor:
bottom of page 190. Perhaps add a note that says "If you do not see the BreakAwayModel assembly listed when you get to Step 5, be sure to build the project so that it knows to display the referenced assembly."

carlsb3rg  Jan 04, 2011  Aug 12, 2011
Printed
Page 200
Paragraph below figure 9-9

Starting with the second sentence the author states: "The ReservationDate was formatted using the Designer. I have demonstrated both ways ...". The author never demonstrated formatting the ReservationDate through the designer.

Note from the Author or Editor:
replace "I have demonstrated" with "I used"

Anonymous  Nov 08, 2011 
Printed
Page 201
4th paragraph

At the start of the paragraph the word When is repeated: "As you saw in Chapter 6, whenWhen you query data ..."

maria  Feb 26, 2011  Aug 12, 2011
Printed
Page 203
Second note

In the last sentence: "I've debugged into the customers variable (a List<Customer>) in Page_Load" the last word should be Form1_Load, not Page_Load

maria  Feb 26, 2011  Aug 12, 2011
PDF
Page 220
2nd paragraph, 2nd and 3rd line

The DisplayMemberPath and SelectedValuePath attributes refer to the properties of the list of lodgings to which you bound the ComboBox in code. SelectedValue gets the LodgingID from the currently selected trip in the ListBox. Should be : The DisplayMemberPath and SelectedValuePath attributes refer to the properties of the list of DESTINATIONS to which you bound the ComboBox in code. SelectedValue gets the DESTINATIONID from the currently selected trip in the ListBox.

Note from the Author or Editor:
yes do this but note that the all caps are not necessary. Destinations and DestinationId

adaapanya  May 22, 2011  Aug 12, 2011
Printed
Page 223
Modifying the code to eager-load the related activities

The printed code snippet omits the leading underscore from the class variables (trips should be _trips and context should be _context). Also the 'OrderBy' method is missing its Lambda; "it.Destination.Name" should be "t => t.Destination.Name"

Note from the Author or Editor:
Add undesscore to first trips as shown in the following code snippet: _trips = context.Trips.Include("Activities") .OrderBy("it.Destination.Name") .ToList() Ignore the 2nd suggestion. The code is using a query builder method, not a linq method so the contents of the OrderBy are correct.

Norman Dutton  Nov 16, 2010  Aug 12, 2011
Printed
Page 225
Example 9-17

context should be _context

Note from the Author or Editor:
1) pls make suggested change 2) same for code sample in middle of page 223. Add underscore in front of trips (we've got this one in a separate errata) and in front of context. _trips=_context.Trips.Include("Activities")

Norman Dutton  Nov 16, 2010  Aug 12, 2011
PDF
Page 235
Second paragraph after the topic "Understanding Query Builder Methods"

"In Chapter 4," should be "In Chapter 3," Example 10-1 is from Example 3-3 Example 10-2 is from Example 3-6

Note from the Author or Editor:
yes, please change to In Chapter 3

Anonymous  Dec 01, 2010  Aug 12, 2011
PDF
Page 241
First paragraph after the topic "ObjectQuery.Parameters"

"In Chapter 4," should be "In Chapter 3," Example 3-4 utilizes ObjectQuery

Note from the Author or Editor:
yes, please change to In Chapter 3

Anonymous  Dec 01, 2010  Aug 12, 2011
Printed, PDF
Page 250
Last Paragraph

In the second line it reads: "...Recall that the PropertyChanging and PropertyChanged events in the generated model classes represent part of the change-tracking functionality. ..." Basically this is the first time in the book that "PropertyChanging" and "PropertyChanged" have been mentioned. Not sure what the "Recall" is referring to. Perhaps it would be better if the above read as: "...As you will see in chapter 11, the PropertyChanging and PropertyChanged events in the generated model classes represent part of the change-tracking functionality. ..."

Note from the Author or Editor:
please make the recommended change. It works for me! :)

Morteza Manavi-Parast  Oct 24, 2010  Nov 01, 2010
Printed, PDF
Page 250
Last Paragraph

On the last paragraph it reads (continues in page 251): "When an object's property is changed, the IEntityWithChangeTracker interface reports this change to the designated ChangeTracker-that is, the current ObjectContext, which updates the appropriate Current value of that object's ObjectStateEntry. For this to work, the object inherits internal functions from IEntityWithChangeTracker." Technically an object cannot "inherit" any functions or functionality from an interface. In this case IEntityWithChangeTracker has only one method: SetChangeTracker which is explicitly implemented by EntityObject. So it's not really the IEntityWithChangeTracker interface who reports this change to the ChangeTracker but the EntityObject by its IEntityWithChangeTracker implementation which is also "inherits" by EF generated objects. I think it would be better if the above changes to something like this: "When an object's property is changed, the EntityObject reports this change via its IEntityWithChangeTracker interface implementation to the designated ChangeTracker-that is, the current ObjectContext, which updates the appropriate Current value of that object's ObjectStateEntry. For this to work, the object inherits internal functions from EntityObject."

Note from the Author or Editor:
change "inherits" to "implements" in the sentence "for this to work..."

Morteza Manavi-Parast  Oct 24, 2010  Nov 01, 2010
Printed, PDF
Page 251
First Bullet Point on the Sidebar

On the first bullet point in the sidebar where it reads: "ObjectQuery to return objects without attaching thŖm to the cache." "them" is misspelled.

Note from the Author or Editor:
oh vey! how does this happen? Please fix the font so that the word "them" does not have weird characters in it.

Morteza Manavi-Parast  Oct 24, 2010  Nov 01, 2010
Printed
Page 257
middle

Author mentions that ObjectStateManager has AcceptAllChanges(), ApplyCurrentValues() and ApplyOriginalValues() methods. But ObjectStateManager hasn't such methods but ObjectContext has.

Note from the Author or Editor:
Yikes, this must have changed while working in the beta and nobody ever noticed! The section "Taking Control of Object State" has two sections inside of it (ObjectStateManager Methods and ObjectStateEntry State Methods for Managing State). We need to add a third but it will go BEFORE the other two. So the new FIRST subsection should be <heading>ObjectContext Methods</heading> Here is a list of the ObjectStateManager methods that allow you to directly impact the state of entities: Followed by the first three list items that are currently under ObjectStateManager methods (applycurrentvalues, applyoriginalvalues,acceptallchanges). Then <header>ObjectStateManager Methods</header> Here is a list of the ObjectStateManager methods that allow you to directly impact the state of entities: Followed by ChangeState and ChangeRelationship state. If this is the least bit unclear, just let me know & I'll markup the PDF pages and email them. ObjectStateManager Methods Here is a list of the ObjectStateManager methods that allow you to directly impact the state of entities:

Timmy_A  Jul 20, 2011  Aug 12, 2011
Printed
Page 262
Second paragraph - the tip

The tip sends you to Chapter 21 for exception handling, it should be Chapter 22.

Note from the Author or Editor:
thanks

Tod  Feb 09, 2012 
Printed, PDF
Page 268
2nd Paragraph

Underneath example 11-1, it reads as: "...It is not necessary to mark the additional classes as Partial as long as you already have that specified elsewhere..." While this is a correct statement in VB.Net, but in C#, if you drop the keyword "partial" from the additional partial classes, the compiler will definitely complain. In general, it's a good practice to always mark all the partial classes with partial keyword even in VB that does not have such a constraint, so I am not sure if it's good to mention this at all.

Note from the Author or Editor:
Remove the sentence

Morteza Manavi-Parast  Oct 25, 2010  Nov 01, 2010
PDF
Page 272
Example 11-9

The partial methods named "OnActivityNameChanging" and "OnActivityNameChanged" should be called "OnNameChanging" and "OnNameChanged". (I posted this in the errata section for the first edition by mistake - please remove/edit if possible)

Note from the Author or Editor:
a darn...I changed the property name and didn't modify the text here. You'll find "OnActivityNameChanging" or "OnActivityNameChanged" 5 times on page 272. Can you change "OnActivityNameChanging" to "OnNameChanging" and OnActivityNameChanged to OnNameChanged? Thanks

carlsb3rg  Jan 05, 2011  Aug 12, 2011
Printed
Page 290
2nd paragraph

The text says 'Example 11-19 leverages the System.String.Format method...' It is example 11-20 that uses this method.

Note from the Author or Editor:
correct. it's 11-20

Derek Hodgkins  Jun 19, 2013 
PDF
Page 313
Example 12-2 in the gotcha

in the markup for the dropdownlist in Example 12-2 SelectedValue= '<%# Bind("PrimaryActivityID") %>' this is right in the gotcha just below it SelectedValue= '<%# Bind("PrimaryActivity.ActivityID") %>' this one throws an exception

Note from the Author or Editor:
Modify the code in the GOTCHA section so that the 3rd line from the bottom has "PrimaryActivityID" in the Bind() rather than "PrimaryActivity.ActivityID").

Rick Jackson  Oct 14, 2010  Nov 01, 2010
Printed
Page 315
gotcha

In the last sentence of the GOTCHA "Remember that AutoGenerateWhereClause=False plus the WhereParameters is an alternative to using the Where property of the EntityDataSource" Replace AutoGenerateWhereClause=False with AutoGenerateWhereClause=True

maria  May 16, 2011  Aug 12, 2011
Printed
Page 324
Middle of Page

The line that reads <asp:Button ID="CancelButton" runat="server" is missing the closing tag "/>" (and anything else you may have had such as Text) By the way - Loving the book so far!!!! You Rock Julia!!!

Note from the Author or Editor:
please add /> to the end of that line

Jonathan Bradley  Jan 07, 2011  Aug 12, 2011
Printed
Page 342
3rd paragraph, also pg 347 fig 13-10

I couldn't get the example (of lazy loading via marking individual navigation properties as virtual) to work without adding context.ContextOptions.LazyLoadingEnabled = true.

Note from the Author or Editor:
p. 346, first paragrph under Lazy Loading by Proxy..add fter the FIRST sentence, extend the 2nd sentence: If you have marked all of the properties as virtual in order to get change tracking, you will also get lazy-loading behavior when the context has lazy loading enabled. 2nd paragrph , extend it's third sentence: The ObjectContext will take care of the rest of the work for you but only if the context's ContextOptions.LazyLoadingEnabled property to True. While Microsoft's code generation template will do this for you (as you saw in Example 11-14), if you are constructing the ObjectContext manually, you will need to set this property yourself. You could also set this property on the fly, as you'll see in Example 13-10. Example 13-10: above 10th code line (ICollection<Address>....) please add the following line of code: context.ContextOptions.LazyLoadingEnabled = true;

Anonymous  Dec 30, 2010  Aug 12, 2011
Printed
Page 357
Example 13-14

The example template code for adding validation to string properties does not work because if you declare the setter body to check for the max length, you also need to declare the body for the get function, e.g. get { return _myPrivateMember; } I worked from the POCO T4 template in VS2010 so the template is slightly different to that explained in the book. The mods to the template are should below. =================================================================== //---@MAR Added code here to ensure the setter checks for the max length where appropriate. <# if (hasMaxLengthAttrib) { #> <#=code.SpaceAfter(Accessibility.ForSetter(edmProperty) ) #> get { return <#=code.FieldName(edmProperty)#>; } set {<#=MaxLengthValidation(edmProperty)#> { <#=code.FieldName(edmProperty)#> = value; } } <# } else { #> //---@MAR End of code for validation check on setters. <#=code.SpaceAfter(Accessibility.ForGetter(edmProperty))#>get; <#=code.SpaceAfter(Accessibility.ForSetter(edmProperty))#>set; <# } #> <# } #> } <# // @MAR: added "| hasMaxLengthAttrib" to the if statement to generate private field for setters that contain validation code(P358) if (!generateAutomaticProperty | hasMaxLengthAttrib) { =================================================================== Also note the mod to the line if (!generatedAutomaticProperty) to include the or below. Without this the private member will not be produced and the code will not compile. if (!generateAutomaticProperty | hasMaxLengthAttrib)

Note from the Author or Editor:
at bottom of page 356, there are 6 lines of code. The fourth reads: <#=code.SpaceAfter(Accessibility.ForGetter(edmProperty))#>get; Change it to: <#=code.SpaceAfter(Accessibility.ForGetter(edmProperty))#>get{return <#=code.FieldName(edmProperty)#>;} The second change he is suggesting I'm seeing already in Figure 13-5. I don't see a problem in the text about this.

Mark Read  Dec 01, 2010  Aug 12, 2011
PDF
Page 367
Canada

The sample code reads in the book like this, this code throws an inner exception public static void TPTMap() { using (var context = new BAEntities()) { var query = from c in context.Contacts.OfType<Customer>() select c; Console.WriteLine("Customers: " + query.Count().ToString()); //Query all contacts Console.WriteLine("All Contacts: " + context.Contacts.Count().ToString()); Customer newCust = new Customer(); newCust.FirstName = "Noam"; newCust.ModifiedDate = DateTime.Now; context.Contacts.AddObject(newCust); context.SaveChanges(); } I found the problem and changed it to this and it works the two DateTime columns have to be set public static void TPTMap() { using (var context = new BAEntities()) { var query = from c in context.Contacts.OfType<Customer>() select c; Console.WriteLine("Customers: " + query.Count().ToString()); //Query all contacts Console.WriteLine("All Contacts: " + context.Contacts.Count().ToString()); Customer newCust = new Customer(); newCust.FirstName = "Noam"; newCust.LastName = "Ben-Ami"; newCust.AddDate = DateTime.Now; newCust.ModifiedDate = DateTime.Now; context.Contacts.AddObject(newCust); context.SaveChanges(); }

Note from the Author or Editor:
add a note on page 367 below the code sample that says If you did not implement the constructor in example 11-18 which sets the Contact.AddDate property, you will get an exception when running the TPTMap method. Alternatively you can explicitly set newCust.AddDate=DateTime.Now in TPTMap.

Rick  Nov 18, 2010  Aug 12, 2011
Printed
Page 374
step 2. (middle of the page)

Typo - "Select the Asscoation between Contact and Address." should read "Select the Association between Contact and Address".

Note from the Author or Editor:
please fix as noted

Jonathan Bradley  Jan 14, 2011  Aug 12, 2011
PDF
Page 382
Number 8 in the list

Make the following change (related to the updated figure 14-14). Change: "Set up the association" To "Set up a 1:1 association between Address and AddressExtra"

Jessica Hosman  Aug 01, 2011  Aug 12, 2011
PDF
Page 383
Figure 14-14

Please update Figure 14-14 with the new version provided by the author.

Jessica Hosman  Aug 01, 2011  Aug 12, 2011
Printed
Page 406
just below note

Please add the parentheses to FullNameReverse as shown here: from c in context.Contacts orderby c.FullNameReverse() select c

Julia Lerman
Julia Lerman
O'Reilly Author 
Nov 11, 2010  Aug 12, 2011
Safari Books Online
422
Example 1 6-2. Calling a function that returns a derived type

o code has an equal '=' sign. var customers = context.CustomersWhoTravelledinDateRange= (new DateTime(2006, 1, 1), new DateTime(2006, 12, 31)); o solution: remove equal '=' sign var customers = context.CustomersWhoTravelledinDateRange( new DateTime(2006, 1, 1), new DateTime(2006, 12, 31));

Note from the Author or Editor:
yes please take that equals sign out...where did it come from??

Dan Ryan  Oct 31, 2010  Nov 01, 2010
Safari Books Online
428
code snippet

o type: the 'f' in PaymentsforContact should be 'F' o List<TripPayment> payments = context.PaymentsforContact(569).ToList(); o solution: List<TripPayment> payments = context.PaymentsForContact(569).ToList();

Note from the Author or Editor:
yes it's a capital F. :)

Dan Ryan  Nov 01, 2010  Nov 01, 2010
Safari Books Online
430
first paragraph after 'Native Objects in Store Layer'

o Our model imported three db views. o typo: 'two' should be 'three' o typo: '...you already have two definingQuery...' o solution: two should be three.

Note from the Author or Editor:
Change the word two to the word three in the phrase "you already have two DefiningQuery elements."

Dan Ryan  Nov 01, 2010  Nov 01, 2010
Safari Books Online
435
DefiningQuery code snippet within CDATA

o typo: all other examples of the UpcomingTripParticipant use a WHERE condition of LESS than or equal to 7; however, this snippet used GREATER than or equal to 7. Discovered this using LINQPad and results returned many more than expected. o solution: change LESS than or equal to 7 to GREATER than or equal to 7

Note from the Author or Editor:
The fix to make is on p. 436 (I'm looking at the PDF). At the top of the page there are 5 lines of code. the third starts with "WHERE DATEDIFF" and towards the end says ">=7". Change that to "<=7"

Dan Ryan  Nov 01, 2010  Nov 01, 2010
Printed
Page 437
Last code example

The <DeviningQuery> select statement has the clause Reservations.EventID = Events.EventID specified twice on the INNER JOIN. It only needs to be specified once.

Note from the Author or Editor:
thanks!

Derek Hodgkins  Jun 27, 2013 
Safari Books Online
440
Executing SQL on the Fly with ExecuteStoreCommand - second and third paragraphs in section

o typo: ExecuteCommand should be ExecuteStoreCommand

Note from the Author or Editor:
They should be ExecuteStoreCommand

Dan Ryan  Nov 01, 2010  Nov 01, 2010
Printed, PDF
Page 452
Last Paragraph of the Sidebar

The last paragraph of the sidebar read as: "You can construct your own POCO classes, use the POCO template provided in the Entity Framework Feature CTP..." While these templates originally came with EF CTP 1 & 2 back in the year 2009, but as it was correctly mentioned in the page 350, now they are available from the Visual Studio 2010 Extension Manager. So I guess the above needs to be read as: "You can construct your own POCO classes, use the POCO template provided in the ADO.NET POCO Entity Generator extensions for Visual Studio 2010".

Note from the Author or Editor:
replace: "use the POCO template provided in the Entity Framework Feature CTP, or ..." with "use the POCO template provided ADO.NET POCO Entity Generator extensions for Visual Studio 2010, or ..."

Morteza Manavi-Parast  Oct 31, 2010  Nov 01, 2010
Printed, PDF
Page 453
3rd Line From the Bottom

It reads as: "Notice that Service1 is not a .vb or .cs file, but an .svc file. That is the actual service that your consuming application will interact with". Technically, this line is not very accurate. While the .svc file is what the consumers interacts with, it's not the "actual service". The actual service is the classes that implementing the service contracts and the .svc file only *references* the service implementation (Please note that I'm aware that in this case the services has been implemented in the .svc code behind file, but still it's not the .svc file but the .svc.cs code file). I think to make it more accurate it can be read as: "Notice that Service1 is not a .vb or .cs file, but an .svc file. That is used to identify the service code behind the file that your consuming application will interact with".

Note from the Author or Editor:
change to "That is a pointer to the actual service that your consuming application will interact with."

Morteza Manavi-Parast  Oct 31, 2010  Nov 01, 2010
Printed, PDF
Page 460
The Code Snippet at the End of the Page

The Predicate in the query inside RemoveTripsFromGraph method reads as: ".Where(r=> r.Trip != null && r.TripID == 0)" TripID is Nullable on Reservation class which means even if TripID would be Null, "r.TripID == 0" will always returns false. This was correctly mentioned and implemented in the downloadable source code from the book website which also has this comment: "TripID is nullable in the model otherwise this would be == 0", therefore, the book's code should be changed to be read as: ".Where(r => r.Trip != null && r.TripID == null) I think there is still one more issue exists and that is what if on the client side, they both populate Trip navigation property and TripID on Reservation object? For example, if we change TestCreateNewReservationforCustomer method to be look like this (from the book source code): newRes.Trip = trips[8]; newRes.TripID = trips[8].TripID; So then ".Where(r=> r.Trip != null && r.TripID == null)" would not find newRes and SavingChanges will throw an exception because the Trip object has not been removed. Wouldn't that be better if we just check for ".Where(r => r.Trip != null)"? Basically means that we will always remove Trip object from the Reservation regardless of the TripID which make sense because Trip object is not meant to be change when we add a new Customer or updating an existing one.

Note from the Author or Editor:
please make the first change from ==0 to == null

Morteza Manavi-Parast  Oct 31, 2010  Aug 12, 2011
Printed, PDF
Page 462
Last Paragraph

It reads as: "In addition to the pattern for deleting from the collection, you'll notice that I don't use an index directly from the Reservations property. Instead, I identify the item position with custtoDelete.Reservations.ToArray()[i]. This is because EntityCollection does support indexing; therefore, you must first cast the EntityCollection to something that can be indexed." This is applied to the previous edition where this code was implemented with a For loop which needs Reservation object to be selected by indexing. Now with having a foreach loop in place, this Paragraph does not apply anymore and should completely be removed.

Note from the Author or Editor:
please remove the entire paragraph in question.

Morteza Manavi-Parast  Oct 31, 2010  Nov 01, 2010
Printed, PDF
Page 464
Example 17-9

In Example 17-9, the line: var customer = CustomerUpdate.Customer; should read: var customer = customerUpdate.Customer; The error is on page 466 in the PDF edition.

Note from the Author or Editor:
change as per submission, thanks

Leroy Casterline  Oct 17, 2011 
Printed
Page 466
Example 17-11 DeleteReservations() method

I suspect the method needs to have a guard clause at the beginning: if (reservationsToDelete == null) return; otherwise the WCF client program would send a CustomerUpdate object back with a NULL ReservationsToDelete. Since it only intends to update the customer and reservation data, and not delete any existing ones. That would cause an exception for LINQ as it won't be able to join a NULL inner collection (reservationsToDelete).

Note from the Author or Editor:
please put Aaron's line of code just above "context.DeleteObject(reservation);" using the same indentation.

Aaron Seet  May 19, 2011  Aug 12, 2011
Printed
Page 467
Example 17-12

cust.ReservationsToDelete should be customerUpdate.ReservationsToDelete

Note from the Author or Editor:
as suggested should be customerUpdate.ReservationsToDelete Darn I thought we caught this already but I'm seeing it in 2nd printing so it might have been in another example :(

Nornan Dutton  Nov 30, 2010  Aug 12, 2011
Printed, PDF
Page 469
Example 17-13

The code in Example 17-13 reads as: List<CustomerService.Trip> results = proxy.GetUpcomingTrips(); However, according to the Figure 17-2 on the previous page, the namespace for the proxy classes is Chapter17ConsoleApp.BAGAServices so that it should be read as: List<BAGAServices.Trip> results = proxy.GetUpcomingTrips(); I think the source of this error is the fact that the very same namespace is named CustomerService in the Chapter 17's source code and it reflects that. I think it's a good idea if both the book and the source code could be consistent in this manner which essentially requires to change the namespace either in the book or in the downloadable source code.

Note from the Author or Editor:
I'm sending an updated figure 17-2. On page 469, under list item #1, there's a single line of code. Change that to read: using Chapter17ConsoleApp.CustomerService; But, do not change the line of code suggested in the errata.

Morteza Manavi-Parast  Nov 01, 2010  Nov 01, 2010
Printed, PDF
Page 469
The Note Under the Example 17-13

It reads as: "You don't need to strongly type the Trip type. I did so only to demonstrate where it's coming from." If this refers to write the namespace name before the type name as List<CustomerService.Trip> then Trip type has not been "Strongly Typed" by that. Combining the Simple Type Name (i.e. Trip) with its namespaces name is called "Fully Qualified Name" of the Type. So it should be read as: "You don't need to use the fully qualified name of the Trip type. I did so only to demonstrate where it's coming from." However, if I am misunderstood and this refers to the declaration of the results variable as opposed to write var results... then it should be read as: "You don't need to strongly type the results variable. I did so only to demonstrate where it's coming from."

Note from the Author or Editor:
Fix note to read: "You don't need to use the fully qualified name of the Trip type. I did so only to demonstrate where it's coming from."

Morteza Manavi-Parast  Nov 01, 2010  Nov 01, 2010
Printed
Page 473
Example 17-15

I was following along in the book and was unable to get this sample of code to run. Debugging the line "string status = proxy.UpdateCustomer(customerToUpdate);" into the service, when ever the customer was attached to the object context - an exception would be thrown with the message "A referential integrity constraint violation occurred: The property values that define the referential constraints are not consistent between principal and dependent objects in the relationship." After a bit of head scratching, I decided to download your solution and compare it against mine. I noticed the following line was missing from Example 17-15, right before the above mentioned line: newRes.ContactID = customer.ContactID; When I added this line, the service was able to attach the customer and its newly created reservation and update it. Looks like it wasn't able to identify the underlying ContactID by just adding it to the customer's reservations.

Note from the Author or Editor:
Please add newRes.ContactID = customer.ContactID; above the existing line: string status = proxy.UpdateCustomer(customerToUpdate);

Jonathan Bradley  Jan 23, 2011  Aug 12, 2011
Printed, PDF
Page 474
4th paragraph

Book states: "You can use HTTP requests such as GET (to retrieve data), PUT (to insert), POST (to update), and DELETE (yes, to delete)." MSDN whitepaper ďUsing ADO.NET Data ServicesĒ states: PUT is used to insert, POST is used to create. This is common usage. Is the Microsoft implementation different?

Note from the Author or Editor:
Ooops....Please switch the terms around as suggested "POST (to insert), PUT (to update)"

Edwin Lassettre  Nov 08, 2010  Nov 01, 2010
Printed
Page 495

In Example 18-3, you list some processor routines to have the T4 generator automatically include inheritance from a custom StateObject class. I may be doing something incorrectly, but that code does not appear to work. When I save the template, I receive an error stating that "The name 'ModelNamespace' does not exist in the current context." and a quick search of the template shows that ModelNamespace doesn't appear anywhere else in the file. Now it's also possible that the code isn't placed in the correct place. The text before the example refers to the placement of MaxLengthValidation in chapter 11, which the errata forum corrects to example 13-12. However, the text preceding that example says to look for a processor routine in the template called WriteFooter which does not exist. I suspect that Microsoft has changed the T4 template since the book was published.

Note from the Author or Editor:
1) at top of page 355, please remove the sentence: "This is followed by the namespace, some using (or Include) statements, 11 lines of code, and then finally the first processing method, WriteFooter." 2) replace the Example 18-3 caption with Example 18-3. The BaseTypeName method to be used in the POCO template 3)replace example 18-3 with the following code (note that the 2d method, multischemaescape, is completely removed) string BaseTypeName(EntityType entity, CodeGenerationTools code) { return entity.BaseType == null ? "POCO.State.StateObject" : code.Escape(entity.BaseType); } (Chapter 11 reference was fixed already for 2nd printing)

John Groft  Nov 23, 2010  Aug 12, 2011
Printed
Page 495
first paragraph

text "First, you'll need to add the method, BaseTypeName, shown in Example 18-3, into the custom methods section of the template where you inserted the MaxLengthValidation method in Chapter 11." Chapter 11 is incorrect, it is Chapter 13, would be better to give the example or page number as well.

Note from the Author or Editor:
replace "in Chapter 11." with "in Example 13-12."

Tomaso A Pye  Sep 27, 2010  Nov 01, 2010
Printed, PDF
Page 498
GetCustomer Method

The query inside GetCustomer(int customerId) method has a predicate that reads: "where c.ContactID == custID" Given that the method's parameter has been named "customerId", the above needs to be changed to read as: "where c.ContactID == customerId"

Note from the Author or Editor:
please change " == custID" to " == customerId" as suggested. thanks

Morteza Manavi-Parast  Nov 02, 2010  Nov 01, 2010
Printed, PDF
Page 499
Switch Case in the Middle of the Page

Just a little typo on the first code snippet where it reads as: "ChangeObjectState(cust,System.Data.EntityState.Modified);" "cust" needs to be change to "customer" since the code snippet starts with: "switch (customer.State)" so it should be changed to read as: "ChangeObjectState(customer,System.Data.EntityState.Modified);"

Note from the Author or Editor:
crap - he's right. Change "ChangeObjectState(cust,System....." to "ChangeObjectState(customer,System....."

Morteza Manavi-Parast  Nov 02, 2010  Nov 01, 2010
Printed, PDF
Page 500
Example 18-7. The SaveCustomer method

In example 18-7 - the SaveCustomer method - inside the using statement, the line of code that reads: context.Contacts.Attach(cust); The local variable name for Customer object is customer so the line should be read as: context.Contacts.Attach(customer);

Note from the Author or Editor:
please make suggesting change (using "customer" instead of "cust")

Morteza Manavi-Parast  Sep 27, 2010  Nov 01, 2010
Printed, PDF
Page 502
Last Paragraph

The 3rd line of the last paragraph reads as: "...The Customer inherits from Contact and maps to Customer and ContactDetails." As per page 376 and also the source code for the chapter, Customer is mapped to Customer and ContactPersonalInfo and NOT to ContactDetails. So the above line should be read as: "...The Customer inherits from Contact and maps to Customer and ContactPersonalInfo."

Note from the Author or Editor:
please fix sentence as suggested

Morteza Manavi  Nov 19, 2010  Aug 12, 2011
Printed, PDF
Page 534
2nd Paragraph

The 4th line of the 2nd Paragraph reads as: "The pseudoentities hiding in the danglingForeignKeys property were created during the query..." _danglingForeignKeys has been declared as follows on ObjectStateManager class: private readonly Dictionary<EntityKey, HashSet<EntityEntry>> _danglingForeignKeys; So it's a field and not a property, also the underscore on _danglingForeignKeys is missing, therefore, the above line should be read as: "The pseudoentities hiding in the _danglingForeignKeys field were created during the query..."

Note from the Author or Editor:
okay change the word property to field and put the underscore in front of dnalgingForeignKeys

Morteza Manavi  Nov 28, 2010  Aug 12, 2011
Printed, PDF
Page 534
Last Paragraph

4th line from the bottom of the page reads as: "When you execute a query that returns addresses, the ContactID from the Addresses table is used to..." According to the database schema on page 167, shouldn't that be "Address table" and not "Addresses table"?

Note from the Author or Editor:
okay change that to Address table

Morteza Manavi  Nov 28, 2010  Aug 12, 2011
Printed, PDF
Page 542
First Paragraph - 4th Line

Fourth Line of the first Paragraph reads as: "recommendation is to use the OnDelete action in the *database* as a reflection of its definition in the database." Since OnDelete Action is referred to EF's EDM, it should be reads as: "...recommendation is to use the OnDelete action in the *model* as a reflection of its definition in the database."

Note from the Author or Editor:
yes, please replace the first instance of database with model so that sentence reads: The recommendation is to use the OnDelete action in the model as a reflection of its definition in the database.

Morteza Manavi  Nov 21, 2010  Aug 12, 2011
Printed, PDF
Page 548
Example 19-10

The last line of the code reads as: con.Addresses.Add(address); However, the contact variable has been declared in the first line as: var contact = (from c in context... So the last line should be read as: contact.Addresses.Add(address);

Note from the Author or Editor:
please change last line of example 19-10 as suggested contact.Addresses.Add(address);

Morteza Manavi  Nov 29, 2010  Aug 12, 2011
Safari Books Online
603
1st paragrapgh

"Now when I want to work with a particular set of entities, such as all of the Customer objects that are managed by the context, I can easily grab them by calling context.ManagedEntities<Customer>. ToList()." This actually should be: context.ManagedEntities<Customer>().ToList() The missing () between ">" and ".ToList()" will cause an error: Error 28 'EFExtensionMethods.Extensions.ManagedEntities<T>(System.Data.Objects.ObjectContext, System.Data.EntityState)' is a 'method', which is not valid in the given context

Note from the Author or Editor:
please add the open & close parens after <Customer> as per submission. thanks

Craig Larsen  Jun 25, 2011  Aug 12, 2011
Printed, PDF
Page 610
2nd Line on the 4th paragraph

On the 2nd Line of the 4th paragraph where it reads: "...using the *Any* method, it looks at the names of each FieldMetaData item for that entry..." According to the code later in the page (inside the foreach): FieldMetadata modifiedField = fieldMetaData .Where(f => f.FieldType.Name == "ModifiedDate") .FirstOrDefault(); It uses the Where() method and not Any(). So, the line should be read as: "...using the Where method, it looks at the names of each FieldMetaData item for that entry..."

Note from the Author or Editor:
Please change "Any" to "Where" in 2nd sentence of 4th paragraph

Morteza Manavi-Parast  Sep 27, 2010  Nov 01, 2010
PDF
Page 677
Example 23-12

The recursive call to SaveChanges() could end up blowing out the CLR stack since C# (and also probably VB) does not do tail recursion. You might want to apply an async pattern here instead. There is a discussion of this on MSDN forum: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/c881b03b-591d-4fb7-969c-07dd48376d78/#c881b03b-591d-4fb7-969c-07dd48376d78

Note from the Author or Editor:
No change in the book. I just want to leave this here for others to see and wasn't sure how to mark it so chose "Confirmed". There's plenty of discussion of it in the referenced MSDN forum link.

John Pinto  Jan 21, 2011 
PDF
Page 679
Example 23-13

You wrote the RefreshContacts that take 1 parameter : private void RefreshContacts(ref ObjectStateEntry entry) { //Contacts will always have a ClientWins refresh //Refresh all of the contacts when the first Contact conflict occurs var managedContacts = ManagedEntities<Contact>(); Refresh(RefreshMode.ClientWins, managedContacts); } But, the parameter is not used. Is it typo ?

Note from the Author or Editor:
replace: private void RefreshContacts(ref ObjectStateEntry entry) with: private void RefreshContacts()

Agus Syahputra  Jul 19, 2011  Aug 12, 2011
Printed
Page 692
middle

Code in test method GetPaymentStatusTest() has some minor typos. This line: Reservation target = new Reservation.PaymentStatus(); should be replaced with: Reservation target = new Reservation; And also method PaymentStatus() in Reservation class doesn't exist but GetPaymentStatus() does.

Note from the Author or Editor:
please change to: Reservation target=new Reservation(); (note for errata submitter...PaymentStatus is the enum in this case because it is declared inside of the Reservation class)

Timmy_A  Aug 15, 2011 
Printed, PDF
Page 750
3rd Paragraph

Where it reads: "code first uses either declaritive attributes or a a fluent configuration on top of specific patterns to infer..." First there is duplicate "a" in there just before "fluent" word. Also this "fluent configuration" phrase is kind of confusing. It sounds like a configuration thing (e.g. data annotations or a config file) while it refers to the Code First Fluent API. I would suggest to change it to "Fluent API" instead which is well known and also widely used by EF team.

Note from the Author or Editor:
please remove redundant "a"

Morteza Manavi  Nov 30, 2010  Aug 12, 2011
Printed, PDF
Page 752
Second Last Paragraph

Where it reads: "Speaker and Session both have identity names that fit the convention, so it is not necessary to use the HasKey property." Like it mentioned earlier in this page, HasKey is a method and not a property so the above line should read as: "Speaker and Session both have identity names that fit the convention, so it is not necessary to use the HasKey method."

Note from the Author or Editor:
yes change "property" to "method"

Morteza Manavi-Parast  Nov 30, 2010  Aug 12, 2011
Printed
Page 755
2nd Paragraph

In the 2nd last line of the 2nd Paragraph, the URL for EF design blog (http://blogs.msdn.com/efdesign) has been put instead of EF Team blog URL which is: http://blogs.msdn.com/b/adonet/ It should be reads as: "I recommend following the Entity Framework teamís blog (http://blogs.msdn.com/b/adonet/) for..."

Note from the Author or Editor:
modify the sentence to read: I recommend following the Entity Framework teamís design blog (adding the word "design". Do not change the url.)

Morteza Manavi  Nov 30, 2010  Aug 12, 2011
Printed
Page 764
sidebar "Making Generic Lists More Flexible"

correction about my previous post. I wrote : That means, you cast a List<T> to ObservableCollection<T>. And the result will always null, because no expicit conversion exist between them. should be : That means, you cast a List<T> to ObservableCollection<T>. And the result will always null, because "they are not in the inheritance hierarchy".

Note from the Author or Editor:
in sidebar, Making Generic Lists more Flexible, which starts on page 764, change return GetUntrackedList<T>(sortExpression) as ObservableCollection<T>; to return new ObservableCollection<T>(GetUntrackedList(sortExpression));

Agus Syahputra  Jul 24, 2011  Aug 12, 2011
Mobi
Page 766
The Book's Website 1st line

the first website http://www.ProgrammingEntityFramework.com/ does not exist use the also available at site

Note from the Author or Editor:
learnentityframework.com

Steve Blake  May 01, 2013 
PDF
Page 787
Figure 27-3

In the New Page Class of the diagram, it reads "Instaniate Databridge" but should read "Instantiate Databridge."

Note from the Author or Editor:
typo...add a "t" if we ever reprint this book

Anonymous  Aug 20, 2012 
Printed
Page 859
First column, the index entry "navigation reference"

The index entry "navigation reference" lists only pg. 84. But pg. 42 introduces the term/concept "navigation reference" - in the 3rd paragraph, in its 2nd-to-last sentence.

Note from the Author or Editor:
Please add 42 to this item in the index

None  Sep 22, 2010  Nov 01, 2010
Printed, PDF
Page 863
At the end of the page

Just a little typo at the end of the page where it reads: "PropertyChanging and PropertyChanged events, EntityObject, 251, 280" Should be changed to: "PropertyChanging and PropertyChanged events, EntityObject, 250, 280" It's page 250 and not 251.

Note from the Author or Editor:
PropertyChanging and PropertyChanged events are on 274 PropertyChanging and PropertyChanged methods are on 271

Morteza Manavi-Parast  Oct 24, 2010  Nov 01, 2010
Other Digital Version
3042
Note ("Command trees will be familiar..."

Reading the Kindle version. In the sentence... If you don't fit into either group, MSDN defines it's DbCommandTree class as "an abstract class..." "it's" should be "its", no apostrophe.

Note from the Author or Editor:
sure

None  Feb 05, 2012