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.
Version |
Location |
Description |
Submitted By |
Date submitted |
Date corrected |
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.
|
JimboT |
Sep 02, 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
|
JimboT |
Sep 06, 2010 |
Nov 01, 2010 |
Printed |
Page Cover
Cover |
The cover needs to have "Foreword by Chris Sells" on it.
|
Anonymous |
Sep 17, 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 ...
|
JimboT |
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
|
ameto79 |
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'");
|
BluJai |
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."
|
JimboT |
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/
|
JimboT |
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
|
JimboT |
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."
|
JimboT |
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.
|
JimboT |
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
|
BluJai |
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 |
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"
|
|
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.
|
|
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 |
Nov 11, 2010 |
Aug 12, 2011 |
|
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 |
|
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 |
|
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 |
|
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 |
|
|
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 |
|
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
|
JimboT |
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
|
geminica |
Feb 05, 2012 |
|