Я использую Entity Framework 4.0 и пытаюсь использовать функцию «Содержит» одного объекта, установленного в моем объекте контекста. для этого я кодировал класс Comparer:
public class RatingInfoComparer : IEqualityComparer<RatingInfo>
{
public bool Equals(RatingInfo x, RatingInfo y)
{
var a = new {x.PlugInID,x.RatingInfoUserIP};
var b = new {y.PlugInID,y.RatingInfoUserIP};
if(a.PlugInID == b.PlugInID && a.RatingInfoUserIP.Equals(b.RatingInfoUserIP))
return true;
else
return false;
}
public int GetHashCode(RatingInfo obj)
{
var a = new { obj.PlugInID, obj.RatingInfoUserIP };
if (Object.ReferenceEquals(obj, null))
return 0;
return a.GetHashCode();
}
}
когда я пытаюсь использовать компаратор с этим кодом:
public void SaveRatingInfo2(int plugInId, string userInfo)
{
RatingInfo ri = new RatingInfo()
{
PlugInID = plugInId,
RatingInfoUser = userInfo,
RatingInfoUserIP = "192.168.1.100"
};
//This is where i get the execption
if (!context.RatingInfoes.Contains<RatingInfo>(ri, new RatingInfoComparer()))
{
//my Entity Framework context object
context.RatingInfoes.AddObject(ri);
context.SaveChanges();
}
}
я получаю исключение:
«LINQ to Entities не распознает метод« Boolean Contains [RatingInfo] (System.Linq.IQueryable 1[OlafCMSLibrary.Models.RatingInfo], OlafCMSLibrary.Models.RatingInfo,
System.Collections.Generic.IEqualityComparer
1 [OlafCMSLibrary.Models.RatingInfo]) », и его метод нельзя преобразовать в выражение хранилища. «
Поскольку я не очень разбираюсь в linQ и Entity Framework, возможно, я ошибаюсь, используя «var» в функции «GetHashCode» или вообще.
Если моя ошибка вам ясна, скажите мне :) это не остановит мой проект! но мне важно понять, почему простой компаратор не работает.
Спасибо
Аарон