我有一个表 Role 与我的数据库中的表 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;
}
}
我收到下面列出的错误消息:
你调用的对象是空的。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例。
源错误:
第 36 行:否则第 37 行:{ 第 38 行:
rolesTable.InsertOnSubmit(role); ins =真;第 39 行:} 第 40 行:源文件:C:\inetpub\sklepomat\DomainModel\Concrete\SqlRolesRepository.cs
行:38
堆栈跟踪:
[NullReferenceException:对象引用未设置为对象的实例。]
System.Data.Linq.Mapping.EntitySetDefSourceAccessor 2.GetBoxedValue(对象实例)+44 System.Data.Linq.StandardTrackedObject.HasDeferredLoader(MetaDataMember deferredMember)+90 系统。 Data.Linq.StandardTrackedObject.get_HasDeferredLoaders() +102 System.Data.Linq.StandardChangeTracker.Track(MetaType mt, Object obj, Dictionary 1.InsertOnSubmit(TEntity entity) +172 DomainModel.Concrete.SqlRolesRepository.SaveRole(Role role) in C :\inetpub\sklepomat\DomainModel\Concrete\SqlRolesRepository.cs:382.GetValue(T instance) +15
System.Data.Linq.Mapping.MetaAccessor2 visited, Boolean recurse, Int32 level) +187
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 () 在 C:\inetpub\sklepomat\WebUI\Controllers\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参数) +242 parameters) +178
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary
System.Web.Mvc.<>c__DisplayClassa.b__7() +52 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter 过滤器,ActionExecutingContext preContext,Func 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) +571 continuation) +254
System.Web.Mvc.<>c__DisplayClassc.<InvokeActionMethodWithFilters>b__9() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList
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
如果不能为空,应该分配什么!?
更新:
引发异常
try { rolesTable.InsertOnSubmit(role);}
catch (Exception ex)
{
throw ex;
}
其中角色对象的字段设置为:
_Users = null,
Name = "New name",
RoleID = 0,
Users = null