c# - LINQ - Association mapping - Null reference on InsertOnSubmit -
i've table role associated in 1-many relation table user in database. i've created linq mapping classes manually:
[table(name="role")] public class role { private entityset<user> _users; [column(isprimarykey = true, isdbgenerated = true, autosync = autosync.oninsert)] public int roleid { get; set; } [column] public string name { get; set; } [association(name = "fk_user_role", storage = "_users", thiskey = "roleid", otherkey = "roleid")] public entityset<user> users { get{ return this._users; } set{ this._users.assign(value);} } }
the problem entityset users can't nullable if later wish create new role:
public override void createrole(string rolename) { try { role new_role = new role(); new_role.name = rolename; _rolesrepository.saverole(new_role); } catch { throw; } }
i'm getting error message listed below:
object reference not set instance of object. description: unhandled exception occurred during execution of current web request. please review stack trace more information error , originated in code.
exception details: system.nullreferenceexception: object reference not set instance of object.
source error:
line 36: else line 37: { line 38:
rolestable.insertonsubmit(role); ins = true; line 39: } line 40:source file: c:\inetpub\sklepomat\domainmodel\concrete\sqlrolesrepository.cs
line: 38
stack trace:
[nullreferenceexception: object reference not set instance of object.]
system.data.linq.mapping.entitysetdefsourceaccessor2.getvalue(t instance) +15
2.getboxedvalue(object instance) +44 system.data.linq.standardtrackedobject.hasdeferredloader(metadatamember deferredmember) +90
system.data.linq.mapping.metaaccessor
system.data.linq.standardtrackedobject.get_hasdeferredloaders() +102
system.data.linq.standardchangetracker.track(metatype mt, object obj, dictionary2 visited, boolean recurse, int32 level) +187
1.insertonsubmit(tentity entity) +172 domainmodel.concrete.sqlrolesrepository.saverole(role role) in c:\inetpub\sklepomat\domainmodel\concrete\sqlrolesrepository.cs:38
system.data.linq.standardchangetracker.track(object obj, boolean recurse) +80 system.data.linq.standardchangetracker.track(object obj) +9 system.data.linq.table
domainmodel.concrete.sklepomatroleprovider.createrole(string rolename) in c:\inetpub\sklepomat\domainmodel\concrete\sklepomatroleprovider.cs:71 system.web.security.roles.createrole(string rolename) +73
webui.controllers.tempcontroller.ble() in c:\inetpub\sklepomat\webui\controllers\tempcontroller.cs:29
lambda_method(executionscope , controllerbase , object[] ) +74
system.web.mvc.actionmethoddispatcher.execute(controllerbase controller, object[] parameters) +17
system.web.mvc.reflectedactiondescriptor.execute(controllercontext controllercontext, idictionary2 parameters) +178
2 parameters) +24
system.web.mvc.controlleractioninvoker.invokeactionmethod(controllercontext controllercontext, actiondescriptor actiondescriptor, idictionary
system.web.mvc.<>c__displayclassa.b__7() +52 system.web.mvc.controlleractioninvoker.invokeactionmethodfilter(iactionfilter filter, actionexecutingcontext precontext, func1 continuation) +254
1 filters, actiondescriptor actiondescriptor, idictionary`2 parameters) +192
system.web.mvc.<>c__displayclassc.<invokeactionmethodwithfilters>b__9() +19 system.web.mvc.controlleractioninvoker.invokeactionmethodwithfilters(controllercontext controllercontext, ilist
system.web.mvc.controlleractioninvoker.invokeaction(controllercontext controllercontext, string actionname) +399
system.web.mvc.controller.executecore() +126
system.web.mvc.controllerbase.execute(requestcontext requestcontext) +27 system.web.mvc.controllerbase.system.web.mvc.icontroller.execute(requestcontext requestcontext) +7
system.web.mvc.mvchandler.processrequest(httpcontextbase httpcontext) +151 system.web.mvc.mvchandler.processrequest(httpcontext httpcontext) +57
system.web.mvc.mvchandler.system.web.ihttphandler.processrequest(httpcontext httpcontext) +7
system.web.callhandlerexecutionstep.system.web.httpapplication.iexecutionstep.execute() +181 system.web.httpapplication.executestep(iexecutionstep step, boolean& completedsynchronously) +75
i assume that's because entityset<user> _users
equals null
... right !? should assigned _users
if can't nullable !?
update:
exception raised
try { rolestable.insertonsubmit(role);} catch (exception ex) { throw ex; }
where role object's fields set to:
_users = null, name = "new name", roleid = 0, users = null
here's link great tutorial related linq mapping: http://www.codeproject.com/kb/linq/linqtutorial.aspx final code is:
[table(name="role")] public class role { private entityset<user> _users = new entityset<user>(); [column(isprimarykey = true, isdbgenerated = true, autosync = autosync.oninsert)] public int roleid { get; set; } [column] public string name { get; set; } [association(name = "fk_user_role", storage = "_users", thiskey = "roleid", otherkey = "roleid")] public entityset<user> users { get{ return this._users; } set{ this._users.assign(value);} } }
Comments
Post a Comment