-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Error unexpected row count 0 expected 1 nhibernatn
PostPosted: Thu Jun 16, 2011 4:36 pm 
Newbie

Joined: Thu Jun 16, 2011 4:11 pm
Posts: 5
Trying to migrate older version to newer one

but getting an error 'unexpected row count 0 expected 1 nhibernate'

Parent Class

using System.Collections;
using Iesi.Collections;
using Nullables;
using Utility;
using System;

namespace Business
{
/// <summary>
/// Summary description for Contact.
/// </summary>
public class Contact
{
private int id;
private string lastName;
private string firstName;
private string middleName;
private string fullName;
private string initials;
private bool isActive;
private string title;
private string greeting;
private string company;
private string notes;
private Nullable<Int32> lastChangedUserId;
private Nullable<DateTime> lastChangedDate;
private string lastChangedReason;

private IList addresses;

//getters and setters


public virtual IList Addresses
{
get
{
if(addresses == null)
addresses = new ArrayList();

return addresses;
}
set { addresses = value; }
}



public virtual void AddAddress(ContactAddress address)
{
address.Contact = this;
Addresses.Add(address);
}





public virtual void Save(int changedByUserId)
{
lastChangedReason = "";
this.lastChangedUserId = changedByUserId;
this.lastChangedDate = DateTime.Today;
Save(this);
}


public virtual void Delete()
{
Delete(this);
}

public static void Save(Contact contact)
{
DbSessionFactory.DbSession(DbType.So).SaveOrUpdate(contact);
}

public static void Delete(Contact contact)
{
DbSessionFactory.DbSession(DbType.So).Delete(contact);
}

public static Contact Get(int contactId)
{
return (Contact) DbSessionFactory.DbSession(DbType.So).GetObjectById(typeof (Contact), contactId);
}

public static IList List()
{
return DbSessionFactory.DbSession(DbType.So).GetObjectList(typeof (Contact));
}

public static IList DisplayList()
{
string sql = "from Contact c order by c.LastName, c.FirstName";
return DbSessionFactory.DbSession(DbType.So).CurrentSession.CreateQuery(sql).List();
}
}
}

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Business.Contact, Business" table="Contact">
<id name="Id" type="Int32" unsaved-value="0">
<column name="ContactID" unique="true" index="PK_FieldMap"/>
<generator class="native" />
</id>

<property name="LastName" column="LastName"/>
<property name="FirstName" column="FirstName"/>
<property name="MiddleName" column="MiddleName"/>
<property name="FullName" column="FullName"/>
<property name="Initials" column="Initials"/>
<property name="IsActive" column="ContactActive" not-null="true" />
<property name="Title" column="Title"/>
<property name="Greeting" column="Greeting"/>
<property name="Company" column="Company"/>
<property name="Notes" column="Notes"/>
<property name="LastChangedUserId" column="LastChangedUser" type="System.Nullable`1[[System.Int32, mscorlib]], mscorlib"/>
<property name="LastChangedDate" column="LastChangedDate" type="System.Nullable`1[[System.DateTime, mscorlib]], mscorlib"/>
<property name="LastChangedReason" column="LastChangedReason"/>

<bag name="Addresses" cascade="delete-orphan" lazy="true" inverse="true">
<key column="ContactID" />
<one-to-many class="Business.ContactAddress, Business" />
</bag>



</class>
</hibernate-mapping>


Child class

using System;
using System.Collections;
using Utility;
using Nullables;
using NHibernate;
using NHibernate.Classic;

namespace Business
{
/// <summary>
/// Summary description for ContactAddress.
/// </summary>
public class ContactAddress : NHibernate.Classic.ILifecycle
{
#region ILifeCycle Implementation
public virtual LifecycleVeto OnSave(ISession session)
{
return LifecycleVeto.NoVeto;
}

public virtual LifecycleVeto OnUpdate(ISession session)
{
return LifecycleVeto.NoVeto;
}

public virtual LifecycleVeto OnDelete(ISession session)
{
return LifecycleVeto.NoVeto;
}

public virtual void OnLoad(ISession session, object oObject)
{
this.m_isChanged = false;
}
;
#endregion


private bool m_isChanged;

private int id;
private string name;
private string address1;
private string address2;
private string city;
private string state;
private string zip;
private string country;
private bool isPrimary;
private Contact contact;
private string m_lastchangeduser;
private Nullable<DateTime> m_lastchangeddate;
private string m_lastchangedreason;


private IList divisions;

//getters and setters
public virtual Contact Contact
{
get { return contact; }
set { contact = value; }
}

/// <summary>
/// Returns whether or not the object has changed it's values.
/// </summary>
public virtual bool IsChanged
{
get
{
return m_isChanged;
}

set
{
m_isChanged = value;
}
}


public virtual IList Divisions
{
get
{
if(divisions == null)
divisions = new ArrayList();
return divisions;
}
set
{
divisions = value;
}
}

public virtual void Save()
{
// as always and just update the DateTime stuff if needed.
if (m_isChanged)
{
LastChangedDate = DateTime.Today;
LastChangedUser = Utility.UserSettings.Current.Username;
}

Save(this);
m_isChanged = false;
}

public virtual void Delete()
{
Delete(this);
}


public static void Save(ContactAddress address)
{
DbSessionFactory.DbSession.SaveOrUpdate(address);
}

public static void Delete(ContactAddress address)
{
DbSessionFactory.DbSession.Delete(address);
}
}
}

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class
name="Business.ContactAddress, Business"
table="ContactAddress">
<id name="Id" column="ContactAddressID" type="Int32" unsaved-value="0">
<generator class="native" />
</id>
<property name="Name" column="ContactAddressName"/>
<property name="Address1" column="Address"/>
<property name="Address2" column="Address2"/>
<property name="City" column="City"/>
<property name="State" column="State"/>
<property name="Zip" column="ZipCode"/>
<property name="Country" column="Country"/>
<property name="IsPrimary" column="IsPrimary" />
<property column="LastChangedUser" type="String" name="LastChangedUser" />
<property column="LastChangedDate" type="System.Nullable`1[[System.DateTime, mscorlib]], mscorlib" name="LastChangedDate" />
<property column="LastChangedReason" type="String" name="LastChangedReason" />
<bag name="Divisions" lazy="true" cascade="none" table="DivisionAddress">
<key column="ContactAddressId"></key>
<many-to-many class="Business.Division, Business" column="DivisionId" />
</bag>
<many-to-one name="Contact" column="ContactID" class="Business.Contact, Business" />
</class>
</hibernate-mapping>

on save in UI saving like this

private void savecontact(Contact contact)
{

DbSessionFactory.DbSession.FlushSession();
DbSessionFactory.DbSession.CloseSession();
DbSessionFactory.DbSession.OpenSession();

Contact contact = Contact.Get(contactId);

ArrayList newAddresses = new ArrayList();
ArrayList newAddressIds = new ArrayList();

for (int i = 0; i < addressDataSource.Rows.Count; i++ )
{
datarow row = addressDataSource.Rows[i];
int addressId = (int)row.GetCellValue("AddressId");


ContactAddress address;
if (addressId > 0)
{
address = ContactAddress.Get(addressId);
if (address != null)
{
newAddressIds.Add(addressId);
}
else
{
address = new ContactAddress();
//newAddressIds.Add(addressId);
}
}
else
{
address = new ContactAddress();
}

if (address != null)
{
// address details entererd

newAddresses.Add(address);
}
}

foreach(ContactAddress address in contact.Addresses)
{
bool found = false;
foreach(int addressId in newAddressIds)
{
if(addressId == address.Id || addressId == 0)
{
found = true;
break;
}
}

if(!found)
{
if (ContactAddressRemoved != null)
ContactAddressRemoved(this, new AddressDeletedEventArgs(address));

address.Delete();
//address.Divisions.Clear();
}
}

contact.Addresses.Clear();


foreach (ContactAddress address in newAddresses)
{
address.Save();
contact.Addresses.Add(address);
}

contact.Save(UserUtil.CurrentUser);
}

thank you,
Vidya


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.