Роль таблицы связана с отношением 1-многие к таблице User в моей базе данных. Я создал классы отображения LINQ вручную:
[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);}
}
}
Проблема в том, что пользователи EntitySet не могут быть обнуляемыми, поэтому если позже, чем я хочу создать новую роль:
public override void CreateRole(string roleName)
{
try
{
Role new_role = new Role();
new_role.Name = roleName;
_RolesRepository.SaveRole(new_role);
}
catch
{
throw;
}
}
Я получаю сообщение об ошибке, указанное ниже:
Ссылка на объект не установлена для экземпляра объекта.
Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: System.NullReferenceException: ссылка на объект отсутствует
установить экземпляр объекта.
Ошибка источника:
Строка 36: еще Строка 37: {Строка 38:
rolesTable.InsertOnSubmit (роль); ins = true; Строка 39:}
Строка 40:
Исходный файл:
C: \ Inetpub \ sklepomat \ DomainModel \ Железобетонные \ SqlRolesRepository.cs
Линия: 38
Трассировка стека:
[NullReferenceException: ссылка на объект не установлена на экземпляр
объект.]
System.Data.Linq.Mapping.EntitySetDefSourceAccessor 2.GetValue(T
instance) +15<br>
System.Data.Linq.Mapping.MetaAccessor
2.GetBoxedValue (экземпляр объекта)
+44 System.Data.Linq.StandardTrackedObject.HasDeferredLoader (MetaDataMember
deferredMember) + 90
System.Data.Linq.StandardTrackedObject.get_HasDeferredLoaders () + 102
System.Data.Linq.StandardChangeTracker.Track (MetaType mt, Object obj,
Словарь 2 visited, Boolean recurse, Int32 level) +187<br>
System.Data.Linq.StandardChangeTracker.Track(Object obj, Boolean
recurse) +80 System.Data.Linq.StandardChangeTracker.Track(Object
obj) +9 System.Data.Linq.Table
1.InsertOnSubmit (сущность TEntity)
+172 DomainModel.Concrete.SqlRolesRepository.SaveRole (роль роли) в C: \ inetpub \ sklepomat \ DomainModel \ Concrete \ SqlRolesRepository.cs: 38
DomainModel.Concrete.SklepomatRoleProvider.CreateRole (String roleName)
в
C: \ Inetpub \ sklepomat \ DomainModel \ Бетон \ SklepomatRoleProvider.cs: 71
System.Web.Security.Roles.CreateRole (String roleName) + 73
WebUI.Controllers.TempController.ble () в
C: \ Inetpub \ sklepomat \ WebUI \ Контроллеры \ TempController.cs: 29
lambda_method (ExecutionScope, ControllerBase, Object []) + 74
System.Web.Mvc.ActionMethodDispatcher.Execute (ControllerBase
контроллер, параметры Object []) + 17
System.Web.Mvc.ReflectedActionDescriptor.Execute (ControllerContext
controllerContext, IDictionary 2 parameters) +178<br>
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext
controllerContext, ActionDescriptor actionDescriptor, IDictionary
2
параметры) + 24
System.Web.Mvc. <> C__DisplayClassa.b__7 ()
+52 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (IActionFilter
фильтр, ActionExecutingContext preContext, фильтры Func 1 continuation) +254<br>
System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9()
+19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext
controllerContext, IList
1, ActionDescriptor actionDescriptor,
Параметры IDictionary`2) + 192
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, логический и завершен синхронно) + 75
Полагаю, это потому, что EntitySet<User> _Users
равно null
...
Я прав !?
Что следует присвоить _Users
, если он не может быть обнуляем!?
UPDATE:
Исключение повышено
try { rolesTable.InsertOnSubmit(role);}
catch (Exception ex)
{
throw ex;
}
Где поля объекта роли установлены в:
_Users = null,
Name = "New name",
RoleID = 0,
Users = null