I want to make this mapping work:
Map(x => x.First, "First_ID");
Map(x => x.Second, "Second_ID")
References(x => x.SomeProperty)
.Access.AsCamelCaseField(Prefix.Underscore)
.Nullable()
.NotFound.Ignore()
.WithColumns("First_ID", "Second_ID")
.LazyLoad();
It doesn’t work when I want to insert the entity to the database. It says:
Invalid Index N for this SqlParameterCollection with Count=N error
I’ve found an answer for the question here:
http://devlicio.us/blogs/derik_whittaker/archive/2009/03/19/nhibernate-and-invalid-index-n-for-this-sqlparametercollection-with-count-n-error.aspx
But the answer says I need to remove below code, to make insert work
Map(x => x.First, "First_ID");
Map(x => x.Second, "Second_ID")
The problem is that I can’t remove the mappings cause in that way my entity couldn’t be fetched from the database. It than says that it cannot find First and Second columns in table.
I understand why this happens but is there some way to solve the problem without removing the mappings?
Just to change something in this code:
References(x => x.SomeProperty)
.Access.AsCamelCaseField(Prefix.Underscore)
.Nullable()
.NotFound.Ignore()
.WithColumns("First_ID", "Second_ID")
.LazyLoad();
For example not to use literals for column names, but some code that “knows” that in this mapping property First is mapped to “First_ID” without specifying explicitly the name of the column?
P.S. I’ve tried to use
References(x => x.SomeProperty)
.Access.AsCamelCaseField(Prefix.Underscore)
.Nullable()
.NotFound.Ignore()
.WithColumns(x => x.First, x => x.Second)
.LazyLoad();
It doesn’t work.
The other solution for removed mappings is to change the query that gets the entity from db, but in this case i need to add extra join – it’s stupid cause I have the column in my own table, why i need to make join and then add some restrictions when I don’t exactly need this join.
You can specify that the properties should not be updateable by doing:
Or if the only reason you want to have these properties is to use them in queries. You can
either do
Or more simply remove those properties and use good old fashion hbm files to map your entities and specify
access="none"for your properties. That way they will be available to you through Criteria and HQL, but won’t actually need to exist in your entity.