J'ai une table Rôle associé en relation 1-many avec table User dans ma base de données. J'ai créé des cours de cartographie LINQ manuellement:LINQ - Association mapping - Référence nulle sur InsertOnSubmit
[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);}
}
}
Le problème est que EntitySet Les utilisateurs ne peuvent pas être annulable si plus tard que je souhaite créer un nouveau rôle:
public override void CreateRole(string roleName)
{
try
{
Role new_role = new Role();
new_role.Name = roleName;
_RolesRepository.SaveRole(new_role);
}
catch
{
throw;
}
}
Je reçois l'erreur message répertorié ci-dessous:
La référence d'objet n'est pas définie sur une instance d'un objet. Description: Une exception non gérée s'est produite lors de l'exécution de la requête Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Erreur:
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 to an instance of an 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
Je suppose que ce que EntitySet<User> _Users
équivaut à null
... Ai-je raison! Ce qui devrait être affecté à _Users
s'il ne peut pas par nullable!?
MISE À JOUR:
exception est levée
try { rolesTable.InsertOnSubmit(role);}
catch (Exception ex)
{
throw ex;
}
Lorsque les champs de l'objet de rôle sont fixés à:
_Users = null,
Name = "New name",
RoleID = 0,
Users = null
'private EntitySet _Users = new EntitySet ();' - travaillé pour moi –
Vous devez accepter votre propre réponse si cela décrit la façon dont vous avez résolu votre problème. – Matthieu