c # LINQ to Entities: неподдерживаемый тип - PullRequest
1 голос
/ 05 января 2011

в решении у меня есть класс интерфейса IUser и, в другом проекте, класс, реализующий Пользователь , реализующий IUser .

Выполнение запросов Linq для объектов IUser приводит к следующему исключению:

Указанный член типа «Имя пользователя» не поддерживается в LINQ to Entities.Поддерживаются только инициализаторы, элементы сущностей и свойства навигации сущностей.

Не могли бы вы помочь мне решить эту проблему?С наилучшими пожеланиями

Sample query(Users() returns IQueryable<IUser>:
var c= (from user in bank.Users()
                           where user.Username == "anUser"
                           select user);

здесь ниже некоторый код:

//the interface

public interface IUser
{

    string Username { get; }
}

// the implementation
public partial class User : IUser
{

   public string Bankname
    {
        get
        {
            return bank_name;
        }
    }

// the partial class generated from the entity model
[EdmEntityTypeAttribute(NamespaceName="Database1Model", Name="User")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class User : EntityObject
{
    #region Factory Method

    /// <summary>
    /// Create a new User object.
    /// </summary>
    /// <param name="user_name">Initial value of the user_name property.</param>
    /// <param name="pass_hash">Initial value of the pass_hash property.</param>
    /// <param name="is_admin">Initial value of the is_admin property.</param>
    /// <param name="bank_name">Initial value of the bank_name property.</param>
    /// <param name="is_enabled">Initial value of the is_enabled property.</param>
    public static User CreateUser(global::System.String user_name, global::System.String pass_hash, global::System.Boolean is_admin, global::System.String bank_name, global::System.Boolean is_enabled)
    {
        User user = new User();
        user.user_name = user_name;
        user.pass_hash = pass_hash;
        user.is_admin = is_admin;
        user.bank_name = bank_name;
        user.is_enabled = is_enabled;
        return user;
    }

    #endregion
    #region Primitive Properties

    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)]
    [DataMemberAttribute()]
    public global::System.String user_name
    {
        get
        {
            return _user_name;
        }
        set
        {
            if (_user_name != value)
            {
                Onuser_nameChanging(value);
                ReportPropertyChanging("user_name");
                _user_name = StructuralObject.SetValidValue(value, false);
                ReportPropertyChanged("user_name");
                Onuser_nameChanged();
            }
        }
    }
    private global::System.String _user_name;
    partial void Onuser_nameChanging(global::System.String value);
    partial void Onuser_nameChanged();
.
.
.
.
}    

Ответы [ 2 ]

2 голосов
/ 05 января 2011

Ваше свойство UserName не имеет средства доступа Set.

Если ваше свойство не реализует средство доступа Set, Framework Entity Framework не может установить значение свойства в этом объекте:)

Вам нужно определить сеттер для UserName, это может быть сделано в вашем конкретном классе.

0 голосов
/ 05 января 2011

Я прошел через это с помощью .ToArray (). AsQueryable (); на мой IQueryable результат ..., в примере прямо в метод bank.Users ().

Спасибо за вашу помощь в любом случае

С наилучшими пожеланиями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...