значение по умолчанию как ноль для типа bool в провайдере профиля - PullRequest
0 голосов
/ 23 марта 2011

У меня есть пользовательский профиль, определенный в моем webconfig.У меня есть это свойство, определенное

<add name="sex" type="bool" serializeAs="String" defaultValue="[null]"/>

, поскольку в базе данных есть нулевые значения.Я получаю исключение нулевой ссылки в этом коде:

    ProfileCommon p = GetProfile();
            txtFirstName.Text = p.first_name;
            txtLastName.Text = p.last_name;
            txtInitial.Text = p.initial;
            txtEmail.Text = p.email;

// это вызывает исключение нулевой ссылки bool?blnTest = p.sex;

Это правильный способ установить значение по умолчанию NULL в webconfig?

1 Ответ

1 голос
/ 23 марта 2011

Проблема здесь в том, что типом свойства профиля по умолчанию является bool, который не может иметь тип NULL.По умолчанию он всегда имеет значение false.

Вы всегда можете создать собственный класс для инкапсуляции пола / пола и использовать его вместо bool.Таким образом, когда значение не установлено, класс затем попытается создать экземпляр и вернуться к нулю при необходимости.

Изменения в веб-конфигурации:

 <profile defaultProvider="MyProfileProvider" inherits="FTS.Membership.Profile.MyProfileProvider,FTS.Membership">
      <providers>
        <clear/>
        <add name="MyProfileProvider" connectionStringName="LocalSqlServer" applicationName="/" type="FTS.Membership.Profile.MyProfileProvider,FTS.Membership"/>
      </providers>
      <properties>
        <add name="first_name" type="string" serializeAs="String" defaultValue=""/>
        <add name="last_name" type="string" serializeAs="String" defaultValue=""/>
        <add name="initial" type="string" serializeAs="String" defaultValue=""/>
        <add name="email" type="string" serializeAs="String"/>
        <add name="active" type="bool" serializeAs="String" defaultValue="false"/>
        <add name="creation_date" type="datetime" serializeAs="String"/>
        <add name="update_date" type="datetime" serializeAs="String"/>
        <add name="last_activity_date" type="datetime" serializeAs="String"/>
        <!--<add name="sex" type="bool" serializeAs="String" defaultValue="false"/>-->

      </properties>
    </profile>

и классе:

using System;
using System.Web.Profile;
using System.Collections.Generic;

namespace FTS.Membership.Profile
{
    public class MyProfileProvider : ProfileBase
    {
        public bool? sex
        {
            get {
                if (base["sex"] == null)
                {
                    return null;
                }
                return (bool)base["sex"];
            }
            set { base["sex"] = value; }
        }
    }
}
...