entity framework - "The relationship could not be changed because one or more of the foreign-key properties is non-nullable..." -


getting following error upon save of context:

the operation failed: relationship not changed because 1 or more of foreign-key properties non-nullable. when change made relationship, related foreign-key property set null value. if foreign-key not support null values, new relationship must defined, foreign-key property must assigned non-null value, or unrelated object must deleted.

the controller code:

#region createstory [httppost] [authorize] public actionresult createstory(userstory story) {     if (modelstate.isvalid)     {         string _username = user.identity.name.tolower();          using (var _db = new nimblecontext())         {             project _project = _db.projects.first(p => p.owner.tolower() == _username);              if (_project != null)             {                 projectgroup _group = _db.groups.first(g => g.groupid == story.groupid);                  if (_group != null)                 {                                                 _db.userstories.add(story);                     _db.savechanges(); <--- error occurs here!                     return json(new { success = true, groupid = _group.groupid });                 }             }                                                     }     }     return json(new { success = false }); } #endregion 

the model structure:

project 1 -> * groups 1 -> * userstories

i can prevent error occurring removing following declarations:

project _project = _db.projects.first(p => p.owner.tolower() == _username); projectgroup _group = _db.groups.first(g => g.groupid == story.groupid); 

however need make these checks ensure user belongs project etc. don't see causing error, none of statements should have impact on data saved right?

its in model design. if explicitly declaring foreign key properties, them this:

public class project {    [key]    [databasegenerated(databasegeneratedoption.identity)]    public int projectid { get; set; }     public virtual icollection<group> groups { get; set; } }   public class group {    [key]    [databasegenerated(databasegeneratedoption.identity)]    public int groupid { get; set; }     [foreignkey("project"), databasegenerated(databasegeneratedoption.none)]    public int? projectid { get; set; }     public virtual project project { get; set; }    public virtual icollection<userstory> userstories{ get; set; } }   public class userstory {    [key]    [databasegenerated(databasegeneratedoption.identity)]    public int userstoryid{ get; set; }     [foreignkey("group"), databasegenerated(databasegeneratedoption.none)]    public int? groupid { get; set; }     public virtual group group { get; set; }    } 

note: should work if following entity framework code first, not sure other methodologies model first , database first


Comments

Popular posts from this blog

jquery - How can I dynamically add a browser tab? -

node.js - Getting the socket id,user id pair of a logged in user(s) -

keyboard - C++ GetAsyncKeyState alternative -