Walaa wrote:
Which runtime library version are you using?
Do you set any fields other than the PK?, try to set a field and see if the save works or not?
I'm using 2.6.8.819. I dug into this a bit deeper and my analysis is the issue is simply that the IsChanged property of the primary key fields does not get set to true and thus they are not inserted. Which makes sense for example when a primary key is an identity field.
As a developer though it was a bit strange to see the IDs being set to the proper values but not being inserted. I think it would make more sense if in the constructor when IsNew is true if the values were reset so it's clear that they need to be manually set. Just my two cents. Probably falls under the a lot of extra generated code for not that big of an issue.
-Keith
Test code:
long questionId = 1;
long entityId = 1;
NarrativeEntity narrative = new NarrativeEntity(questionId, entityId);
Response.Write(string.Format("IsNew:{0}<br />", narrative.IsNew));
Response.Write(string.Format("NarrativeQuestionId:{0}<br />", narrative.NarrativeQuestionId));
Response.Write(string.Format("EntityId:{0}<br />", narrative.EntityId));
try
{
Response.Write(string.Format("Save return value:{0}<br />", narrative.Save()));
Response.Write("Save succeeded?<br />");
Response.Write(string.Format("IsNew:{0}<br />", narrative.IsNew));
narrative.Delete();
}
catch (Exception ex)
{
Response.Write(string.Format("Save failed:{0}<br />", ex.Message));
}
Response.Write("<br />");
narrative = new NarrativeEntity(questionId, entityId);
try
{
narrative.NarrativeText = "test";
Response.Write(string.Format("IsNew:{0}<br />", narrative.IsNew));
Response.Write(string.Format("NarrativeQuestionId:{0}<br />", narrative.NarrativeQuestionId));
Response.Write(string.Format("EntityId:{0}<br />", narrative.EntityId));
Response.Write(string.Format("NarrativeQuestionId IsChanged:{0}<br />", narrative.Fields["NarrativeQuestionId"].IsChanged));
Response.Write(string.Format("EntityId IsChanged:{0}<br />", narrative.Fields["EntityId"].IsChanged));
narrative.Save();
Response.Write("Save succeeded after setting text.<br />");
narrative.Delete();
}
catch (Exception ex)
{
Response.Write(string.Format("Save failed after setting text:{0}<br />", ex.Message));
}
Response.Write("<br />");
narrative = new NarrativeEntity(questionId, entityId);
try
{
narrative.NarrativeQuestionId = questionId;
Response.Write(string.Format("NarrativeQuestionId IsChanged:{0}<br />", narrative.Fields["NarrativeQuestionId"].IsChanged));
narrative.EntityId = entityId;
narrative.NarrativeText = "test";
narrative.Save();
Response.Write("Save succeeded after setting Ids and text.<br />");
Response.Write(string.Format("IsNew:{0}<br />", narrative.IsNew));
narrative.Delete();
}
catch (Exception ex)
{
Response.Write(string.Format("Save failed after after setting Ids:{0}<br />", ex.Message));
}
narrative = new NarrativeEntity(questionId, entityId);
try
{
narrative.NarrativeText = "test";
narrative.Fields["NarrativeQuestionId"].IsChanged = true;
narrative.Fields["EntityId"].IsChanged = true;
narrative.Save();
Response.Write("Save succeeded after setting text and IsChanged to true for Ids.<br />");
narrative.Delete();
}
catch (Exception ex)
{
Response.Write(string.Format("Save failed after after setting text and IsChanged to true for Ids:{0}<br />", ex.Message));
}
Output:
IsNew:True
NarrativeQuestionId:1
EntityId:1
Save return value:True
Save succeeded?
IsNew:True
IsNew:True
NarrativeQuestionId:1
EntityId:1
NarrativeQuestionId IsChanged:False
EntityId IsChanged:False
Save failed after setting text:An exception was caught during the execution of an action query: Cannot insert the value NULL into column 'NarrativeQuestionId', table 'eSPv3Dev.dbo.SectionNarrative'; column does not allow nulls. INSERT fails. The statement has been terminated.. Check InnerException, QueryExecuted and Parameters of this exception to examine the cause of this exception.
NarrativeQuestionId IsChanged:True
Save succeeded after setting Ids and text.
IsNew:False
Save succeeded after setting text and IsChanged to true for Ids.