Thanks James. Now with the cascade.All, the Saves are working fine. I guess there is no way to set up "cascade all" for all the Entities that references another Entity. Ramana
On Thu, Feb 12, 2009 at 3:01 AM, James Gregory <[email protected]>wrote: > Those wiki pages cover how you'd set the cascade. > ForTypesThatDeriveFrom<Golfer>(m => > { > m.References(x => Address) > .Cascade.All(); > }) > > On Thu, Feb 12, 2009 at 12:09 AM, Ramana Kumar > <[email protected]>wrote: > >> 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 -~----------~----~----~----~------~----~------~--~---
