I'm talking about this specific issue, but those kinds of unexpected stuff
in general. I believe it should have been easy to discover, and in my apps
it is because I use SchemaUpdate in application start event.

For suggestions:
If the company can accept the option, I suggest LLBLGen Pro, otherwise, I
remain silent and take whatever they prefer to, usually it ends to LINQ To
SQL, which is a nightmare in its own.

Regards,

--
Mohamed Meligy
Senior Developer, Team Lead Backup (.Net Technologies - TDG - Applications)
Injazat Data Systems
P.O. Box: 8230 Abu Dhabi, UAE.

Phone:  +971 2 6992700
Direct:   +971 2 4045385
Mobile:  +971 50 2623624, +971 55 2017 621

E-mail: [email protected]
Weblog: http://weblogs.asp.net/meligy


On Tue, Jan 12, 2010 at 2:17 PM, Oskar Berggren <[email protected]>wrote:

> Another way of avoiding "these kind of hidden costs" is to have a unit
> test that verifies that nhibernate can be initialized, including
> parsing of all mapping files etc. Optionally, I also like to have the
> test output the nhibernate generated schema to standard output.
>
> With that test you would have gotten the error message with the true
> message, instead of it being hidden by some other parser.
>
> /Oskar
>
>
> 2010/1/12 Sheri <[email protected]>:
> > What do you recommend instead? something more clear and fast?
> >
> >
> > On 12 Jan, 10:52, Mohamed Meligy <[email protected]> wrote:
> >> This kind of hidden costs is what makes me although I like NHibernate
> pretty
> >> much not recommend it to my company and just use it in freelance
> projects,
> >> etc... :S
> >>
> >> Regards,
> >>
> >> --
> >> Mohamed Meligy
> >> Senior Developer, Team Lead Backup (.Net Technologies - TDG -
> Applications)
> >> Injazat Data Systems
> >> P.O. Box: 8230 Abu Dhabi, UAE.
> >>
> >> Phone:  +971 2 6992700
> >> Direct:   +971 2 4045385
> >> Mobile:  +971 50 2623624, +971 55 2017 621
> >>
> >> E-mail: [email protected]
> >> Weblog:http://weblogs.asp.net/meligy
> >>
> >>
> >>
> >> On Tue, Jan 12, 2010 at 1:39 PM, Sheri <[email protected]> wrote:
> >> > the problem is solved
> >>
> >> > just a "virtual" keyword was missed for a property in an entity
> >> > class!!!!!!!!!! (the cost = 1,5 days... it is nice well)
> >>
> >> > On 12 Jan, 09:52, Sheri <[email protected]> wrote:
> >> > > Hi Mohammad!
> >> > > Thansk for you quick reply
> >> > > Yes I use custome membership provider. I use project model and I
> have
> >> > > created "ASP .NET MVC" project through its template (1.0). It is a
> >> > > local server, I have used the built in SQL Server in VS 2008.
> >>
> >> > > my wb.config for mentioned part (nhibernate and membership provider
> >> > > looks like so:
> >>
> >> > > _________________ Parts of web.config _________________
> >>
> >> > > <configuration>
> >>
> >> > >   <configSections>
> >> > >    ....
> >> > >     <section name="hibernate-configuration"
> >> > > type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
> >> > >   </configSections>
> >>
> >> > >   <appSettings/>
> >>
> >> > >   <connectionStrings>
> >> > >     <add name="ApplicationServices" connectionString="data source=.
> >> > > \SQLEXPRESS;Integrated
> Security=SSPI;AttachDBFilename=|DataDirectory|
> >> > > aspnetdb.mdf;User Instance=true"
> providerName="System.Data.SqlClient"/
> >>
> >> > >   </connectionStrings>
> >>
> >> > >   <system.web>
> >> > > ...
> >> > >     <authentication mode="Forms">
> >> > >       <forms loginUrl="~/Account/LogOn" timeout="2880" />
> >> > >     </authentication>
> >>
> >> > >     <membership defaultProvider="MonitorMembershipProvider">
> >> > >       <providers>
> >> > >         <clear/>
> >> > >         <add name="MonitorMembershipProvider"
> >>
> >> >
> type="WebMonitorUpdate.MembershipServicesImpl.SQLServerMembershipProvider"
> >> > >              connectionStringName=""
> >> > >              enablePasswordRetrieval="true"
> >> > >              enablePasswordReset="true"
> >> > >              requiresQuestionAndAnswer="false"
> >> > >              requiresUniqueEmail="true"
> >> > >              passwordFormat="Hashed"
> >> > >              maxInvalidPasswordAttempts="5"
> >> > >              minRequiredPasswordLength="6"
> >> > >              minRequiredNonalphanumericCharacters="0"
> >> > >              passwordAttemptWindow="10"
> >> > >              passwordStrengthRegularExpression=""
> >> > >              applicationName="/"
> >> > >                 />
> >> > >       </providers>
> >> > >     </membership>
> >>
> >> > >     <profile>
> >> > >       <providers>
> >> > >         <clear/>
> >> > >         <add name="AspNetSqlProfileProvider"
> >> > >              type="System.Web.Profile.SqlProfileProvider,
> System.Web,
> >> > > Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
> >> > >              connectionStringName="ApplicationServices"
> >> > >              applicationName="/"
> >> > >                 />
> >> > >       </providers>
> >> > >     </profile>
> >>
> >> > >     <roleManager enabled="false">
> >> > >       <providers>
> >> > >         <clear />
> >> > >         <add connectionStringName="ApplicationServices"
> >> > > applicationName="/" name="AspNetSqlRoleProvider"
> >> > > type="System.Web.Security.SqlRoleProvider, System.Web,
> >> > > Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
> />
> >> > >         <add applicationName="/"
> name="AspNetWindowsTokenRoleProvider"
> >> > > type="System.Web.Security.WindowsTokenRoleProvider, System.Web,
> >> > > Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
> />
> >> > >       </providers>
> >> > >     </roleManager>
> >>
> >> > >    .....
> >>
> >> > >   <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
> >> > >     <session-factory name="WebMonitorUpdate">
> >> > >       <property
> >>
> >> >
> name="connection.provider">NHibernate.Connection.DriverConnectionProvider</
> >> > > property>
> >> > >       <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</
> >> > > property>
> >> > >       <property
> >> > > name="connection.driver_class">NHibernate.Driver.SqlClientDriver</
> >> > > property>
> >> > >       <property name="connection.connection_string">Data Source=.
> >> > > \SQLEXPRESS;AttachDbFilename=|DataDirectory|
> >> > > WebMonitorUpdate.mdf;Integrated Security=True;User Instance=True</
> >> > > property>
> >> > >       <property
> >>
> >> >
> name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFac
> >> > tory,
> >> > > NHibernate.ByteCode.LinFu</property>
> >> > >       <mapping assembly ="WebMonitorUpdate" />
> >> > >     </session-factory>
> >> > >   </hibernate-configuration>
> >> > > </configuration>
> >> > > ___________________________________________________
> >>
> >> > > Here is the code for my membership provider:
> >>
> >> > > _________________ MEMBERSHIP PROVIDER _________________
> >>
> >> > >     public sealed class SQLServerMembershipProvider :
> >> > > MembershipProvider
> >> > >     {
> >> > >         private OnlineSystemService service = null;
> >>
> >> > >         private string applicationName;
> >> > >         private int maxInvalidPasswordAttempts;
> >> > >         private int passwordAttemptWindow;
> >> > >         private int minRequiredNonAlphanumericCharacters;
> >> > >         private int minRequiredPasswordLength;
> >> > >         private string passwordStrengthRegularExpression;
> >> > >         private bool enablePasswordReset;
> >> > >         private bool enablePasswordRetrieval;
> >> > >         private bool requiresQuestionAndAnswer;
> >> > >         private bool requiresUniqueEmail;
> >>
> >> > >         #region Settings
> >>
> >> > >         public override string ApplicationName
> >> > >         {
> >> > >             get { return this.applicationName; }
> >> > >             set { this.applicationName = value; }
> >> > >         }
> >>
> >> > >         public override int MaxInvalidPasswordAttempts { get {
> return
> >> > > this.maxInvalidPasswordAttempts; } }
> >> > >         public override int PasswordAttemptWindow { get { return
> >> > > this.passwordAttemptWindow; } }
> >> > >         public override int MinRequiredNonAlphanumericCharacters {
> get
> >> > > { return this.minRequiredNonAlphanumericCharacters; } }
> >> > >         public override int MinRequiredPasswordLength { get { return
> >> > > this.minRequiredPasswordLength; } }
> >> > >         public override string PasswordStrengthRegularExpression {
> get
> >> > > { return this.passwordStrengthRegularExpression; } }
> >> > >         public override bool EnablePasswordReset { get { return
> >> > > this.enablePasswordReset; } }
> >> > >         public override bool EnablePasswordRetrieval { get { return
> >> > > false; } }
> >> > >         public override bool RequiresQuestionAndAnswer { get {
> return
> >> > > this.requiresQuestionAndAnswer; } }
> >> > >         public override bool RequiresUniqueEmail { get { return
> >> > > this.requiresUniqueEmail; } }
> >> > >         public override MembershipPasswordFormat PasswordFormat
> >> > >         {
> >> > >             get { return MembershipPasswordFormat.Hashed; }
> >> > >         }
> >>
> >> > >         #endregion
> >>
> >> > >         public SQLServerMembershipProvider(): this(null)
> >> > >         {
> >> > >         }
> >>
> >> > >         public SQLServerMembershipProvider(OnlineSystemService
> >> > > service)
> >> > >         {
> >> > >             this.service = service ?? new OnlineSystemService();
> >> > >         }
> >>
> >> > >         public override void Initialize(string name,
> >> > > NameValueCollection config)
> >> > >         {
> >> > >             base.Initialize(name, config);
> >>
> >> > >             this.ApplicationName = GetConfigValue(config
> >> > > ["applicationName"],
> >>
> >> > > System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath);
> >> > >             this.maxInvalidPasswordAttempts = Convert.ToInt32
> >> > > (GetConfigValue(config["maxInvalidPasswordAttempts"], "5"));
> >> > >             this.passwordAttemptWindow =
> Convert.ToInt32(GetConfigValue
> >> > > (config["passwordAttemptWindow"], "10"));
> >> > >             this.minRequiredNonAlphanumericCharacters =
> Convert.ToInt32
> >> > > (GetConfigValue(config["minRequiredNonAlphanumericCharacters"],
> "1"));
> >> > >             this.minRequiredPasswordLength = Convert.ToInt32
> >> > > (GetConfigValue(config["minRequiredPasswordLength"], "7"));
> >> > >             this.passwordStrengthRegularExpression =
> Convert.ToString
> >> > > (GetConfigValue(config["passwordStrengthRegularExpression"],
> >> > > string.Empty));
> >> > >             this.enablePasswordReset =
> Convert.ToBoolean(GetConfigValue
> >> > > (config["enablePasswordReset"], "true"));
> >> > >             this.enablePasswordRetrieval = Convert.ToBoolean
> >> > > (GetConfigValue(config["enablePasswordRetrieval"], "true"));
> >> > >             this.requiresQuestionAndAnswer = Convert.ToBoolean
> >> > > (GetConfigValue(config["requiresQuestionAndAnswer"], "false"));
> >> > >             this.requiresUniqueEmail =
> Convert.ToBoolean(GetConfigValue
> >> > > (config["requiresUniqueEmail"], "true"));
> >> > >         }
> >>
> >> > >         public override bool ChangePassword(string username, string
> >> > > oldPassword, string newPassword)
> >> > >         {
> >>
> >> > >             //username and systemId1 are splited by |
> >> > >             if (!String.IsNullOrEmpty(username))
> >> > >             {
> >> > >                 OnlineSystem system =
> >> > > this.service.getCustomerInfoByName(username);
> >> > >                 if (system == null) return false;
> >>
> >> > >                 if (!CheckPassword(oldPassword, system.Password))
> >> > > return false;
> >>
> >> > >                 ValidatePasswordEventArgs args = new
> >> > > ValidatePasswordEventArgs(username, newPassword, false);
> >> > >                 OnValidatingPassword(args);
> >> > >                 if (args.Cancel)
> >> > >                 {
> >> > >                     if (args.FailureInformation != null)
> >> > >                         throw args.FailureInformation;
> >> > >                     else
> >> > >                         throw new
> MembershipPasswordException("Change
> >> > > password canceled due to new password validation failure.");
> >> > >                 }
> >> > >                 system.Password = HashPassword(newPassword);
> >> > >                 service.SystemDAO.commitTransaction();
> >> > >             }
> >> > >             else
> >> > >             {
> >> > >                 return false;
> >>
> >> ...
> >>
> >> läs mer »
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> "nhusers" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to
> [email protected]<nhusers%[email protected]>
> .
> > For more options, visit this group at
> http://groups.google.com/group/nhusers?hl=en.
> >
> >
> >
> >
>
> --
> You received this message because you are subscribed to the Google Groups
> "nhusers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<nhusers%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/nhusers?hl=en.
>
>
>
>
--
You received this message because you are subscribed to the Google Groups "nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to [email protected].
For more options, visit this group at http://groups.google.com/group/nhusers?hl=en.

Reply via email to