I will go back home and check the wiki pages.  In the meantime, here is what
I use to save

        [Transaction]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create(Golfer golfer) {
            if (golfer.IsValid()) {
                golferRepository.SaveOrUpdate(golfer);
                TempData["message"] = "The golfer was successfully
created.";
                return RedirectToAction("Index");
            }
            else {

MvcValidationAdapter.TransferValidationMessagesTo(ViewData.ModelState,
golfer.ValidationResults());
                return View();
            }
        }

When I put it the thru the debugger, I see that golfer instance has correct
values (from the form) for FirstName, LastName, Email as well as
Address.Addr1, Address.City etc populated correctly.

 BTW, SaveOrUpdate if fine and when the "Create" method ends (i.e. the
transaction is complete) then I get the exception.  Obviously, because the
flush is thrwoing the exception.

I still suspect that "cascade" on ManyToOne needs to set to "all", I am not
sure how to do it.
Thanks
Ramana


On Wed, Feb 11, 2009 at 2:59 PM, James Gregory <[email protected]>wrote:

> Can you show us the code that's actually saving the entities?
> These two wiki pages show the ways you can customise automappings: altering
> entities<http://wiki.fluentnhibernate.org/show/AutoMappingAlteringEntities> 
> and
> mapping overrides<http://wiki.fluentnhibernate.org/show/AutoMappingOverrides>.
>
>
>
> On Wed, Feb 11, 2009 at 8:43 PM, Ramana Kumar <[email protected]>wrote:
>
>> No, I did mean Many to One :-)  The Domain Objects are Golfer and Address
>> and many Golfers can share the same Address.  Per James
>> "i-think-you-mean-a-many-to-one-sir" G, this should be mapped as Many to
>> one. I am just not sure how to do it thru AutoMap conventions.
>> HTH
>> Ramana
>>
>>
>>  namespace GolfHandicapManager.Core
>> {
>>     public class Golfer : Entity
>>     {
>>         public Golfer() { }
>>         [DomainSignature]
>>         [NotNullNotEmpty]
>>         public virtual string FirstName { get; set; }
>>         [DomainSignature]
>>         [NotNullNotEmpty]
>>         public virtual string LastName { get; set; }
>>         [NotNullNotEmpty]
>>         public virtual string EmailAddress { get; set; }
>>   public virtual string EmailAddress2 { get; set; }
>>   public virtual string HomePhone { get; set; }
>>   public virtual string CellPhone { get; set; }
>>         public virtual Address Address { get; set; }
>>     }
>>     public class Address : Entity
>>     {
>>         public Address() { }
>>         [DomainSignature]
>>   public virtual string Addr1 { get; set; }
>>   public virtual string Addr2 { get; set; }
>>         [DomainSignature]
>>   public virtual string City { get; set; }
>>   public virtual string State { get; set; }
>>   public virtual string Country { get; set; }
>>   public virtual string ZipCode { get; set; }
>>     }
>> }
>>
>>
>>
>> On Wed, Feb 11, 2009 at 2:05 PM, Chris Marisic <[email protected]> wrote:
>>
>>>
>>> Do you mean One to Many?
>>>
>>> convention.OneToManyConvention = m =>
>>> {
>>>    m.Cascade.All();
>>> };
>>>
>>> On Feb 11, 1:58 pm, Ramana Kumar <[email protected]> wrote:
>>> > Hi
>>> > I am trying to use AutoMap to define behaviour for ManyToOne and I get
>>> the
>>> > following exception
>>> >
>>> > object references an unsaved transient instance - save the transient
>>> > instance before flushing:
>>> >
>>> > The relevant code is
>>> >
>>> >  public class AutoPersistenceModelGenerator :
>>> IAutoPersistenceModelGenerator
>>> >     {
>>> >         public AutoPersistenceModel Generate()
>>> >         {
>>> >             AutoPersistenceModel mappings = AutoPersistenceModel
>>> >                 .MapEntitiesFromAssemblyOf<Golfer>()
>>> >                 .Where(GetAutoMappingFilter)
>>> >                 .WithConvention(GetConventions);
>>> >             return mappings;
>>> >         }
>>> >
>>> >         private bool GetAutoMappingFilter(Type t)
>>> >         {
>>> >             return t.Namespace == "GolfHandicapManager.Core";
>>> >         }
>>> >         private void GetConventions(Conventions c)
>>> >         {
>>> >             c.GetPrimaryKeyNameFromType = type => "ROW_ID";  //DB has
>>> ROW_ID
>>> > as Primary Key
>>> >             c.FindIdentity = type => type.Name == "ID"; // S#arp
>>> currently
>>> > uses "ID"
>>> >             // Taken from Ayende Blog
>>> >             c.GetForeignKeyNameOfParent = (type => type.Name + "_ID");
>>> >             c.GetTableName = type =>
>>> > Inflector.Net.Inflector.Pluralize(type.Name);
>>> >             c.IsBaseType = IsBaseTypeConvention;
>>> >             // Convert PropertyName to Underscore
>>> >             c.AddPropertyConvention(new
>>> > PascalToUnderscorePropertyConvention());
>>> >         }
>>> >
>>> > I am assuming I have to do a "cascade=all" somewhere in there but do
>>> not
>>> > know how to do it thru a convention.
>>> >
>>> > Any pointers?
>>> > Thanks
>>> > Ramana
>>>
>>>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Fluent NHibernate" 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/fluent-nhibernate?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to