0

データベース内のテーブルUserと1-manyの関係で関連付けられたテーブルRoleがあります。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ユーザーをnull許容にできないことです。そのため、後で新しいロールを作成したい場合は、次のようにします。

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行目:else 37行目:{38行目:
rolesTable.InsertOnSubmit(role); ins = true; 39行目:} 40行目:

ソースファイル:C:\ inetpub \ sklepomat \ DomainModel \ Concrete \ SqlRolesRepository.cs
行:38

スタックトレース:

[NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。]
System.Data.Linq.Mapping.EntitySetDefSourceAccessor 2.GetBoxedValue(Object instance)+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.MetaAccessor


2 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 ()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、IDictionary 2 parameters)+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 filter、ActionExecutingContext preContext、Func 1 filter、ActionDescriptor actionDescriptor、IDictionary`2 parameters)+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 step 、ブール値&completedSynchronously)+75

私はそれがEntitySet<User> _Users等しいからnullだと思います...私は正しいですか!?null許容型でできない場合は、何を割り当てる必要があり_Usersますか?

アップデート:

例外が発生します

        try { rolesTable.InsertOnSubmit(role);}
        catch (Exception ex)
        {
            throw ex;

        }

ロールオブジェクトのフィールドが設定されている場所:

_Users = null,
Name = "New name",
RoleID = 0,
Users = null
4

2 に答える 2

4

LINQマッピングに関連する優れたチュートリアルへのリンクは次のとおりです。http://www.codeproject.com/KB/linq/linqtutorial.aspx私の最終的なコードは次のとおりです。

[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);}
        }
}
于 2010-01-24T15:48:33.673 に答える
1

コードやスキーマに問題があります。主キーであるRole.RoleIDプロパティは、null許容のint型です。これはできません。主キー値にnull値を含めることはできません。

于 2010-01-24T04:04:04.167 に答える