On 7/13/06, Clinton Begin <[EMAIL PROTECTED]> wrote:
Hi guys,
Are you aware that field names conflict with property names when automapping columns? So a class written like:
public class Customer
{
private int id;
public int ID
{
get { return id; }
set { id = value; }
}
}
... will cause iBATIS.NET to fail with:
CustomerRepositoryTest.ShouldGetCustomerByID : IBatisNet.DataMapper.Exceptions.DataMapperException : Error automapping columns. Cause: Item has already been added. Key in dictionary: 'ID' Key being added: 'ID'
----> System.ArgumentException : Item has already been added. Key in dictionary: 'ID' Key being added: 'ID'
Seems like we're using the same map for fields and properties. I suppose the solution is to not. :-)
The MS .NET guidelance is to prefix private field with an underscore, this will resolve the conflict name for now.
I think we should probably have two maps, one for fields, one for properties and then make a decision like: "properties always take precidence over fields if both exist" (favouring encapsulation).
I don't see thing like this, a property in a parameter map/result map is only used to define a mapping of a property or a field not the two. The rule is : the .net member name must permit to distinguish one from to other.
I think we can avoid make the decision like: "properties always take precedence over fields if both exist".
I will try to resolve this.
Thoughts?
Clinton

