DataPortal_Fetch Overload causes Ambiguous Error in 3.5 Beta 2

DataPortal_Fetch Overload causes Ambiguous Error in 3.5 Beta 2

Old forum URL: forums.lhotka.net/forums/t/4428.aspx


colema18 posted on Wednesday, February 27, 2008

    This might be a bug, but I am thinking it is most likely my implementation/design.  I have a businessbase object that I want to be able to fetch on by Guid or by Name.  The problem with this however is that overloading DataPortal_Fetch with wanting a SingleCriteria<DealerGroup, string> or SingleCriteria<DealerGroup, guid> causes an error:

Error:
Csla.Server.CallMethodException: DataPortal_Fetch method call failed --->  System.Reflection.AmbiguousMatchException: Ambiguous match found..

Code:
      //FACTORY METHODS
        public static DealerGroup GetDealerGroup(Guid id)
        {
            if (!(CanGetObject()))
                throw new System.Security.SecurityException("User not authorized to view a dealer group");
            return DataPortal.Fetch<DealerGroup>(new SingleFieldCriteria<DealerGroup, Guid>(id,SingleCriteriaFieldName.Id));
        }
        public static DealerGroup GetDealerGroup(string name)
        {
            if (!(CanGetObject()))
                throw new System.Security.SecurityException("User not authorized to view a dealer group");
            return DataPortal.Fetch<DealerGroup>(new SingleFieldCriteria<DealerGroup, string>(name, SingleCriteriaFieldName.Name));
        }

        private void DataPortal_Fetch(SingleFieldCriteria<DealerGroup, Guid> criteria)
        {
            using (var ctx = ContextManager<FinanceSource.DalLinq.UserDataContext>.GetManager(Database.FinanceSourceConnection))
            {
                var data = (from d in ctx.DataContext.DealerGroups
                        where d.Id == (Guid)criteria.Value
                        select d).Single();
                LoadProperties(data);
            }
        }

        //DATA ACCESS METHODS
        private void DataPortal_Fetch(SingleFieldCriteria<DealerGroup, String> criteria)
        {
            using (var ctx = ContextManager<FinanceSource.DalLinq.UserDataContext>.GetManager(Database.FinanceSourceConnection))
            {
                FinanceSource.DalLinq.DealerGroup data = null;
                switch (criteria.FieldName)
                {
                    case SingleCriteriaFieldName.Name:
                        data = (from d in ctx.DataContext.DealerGroups
                                where d.Name == (String)criteria.Value
                                select d).Single();
                        break;
                    default:
                        break;
                }
                LoadProperties(data);
            }
        }



Copyright (c) Marimer LLC