2011-01-05 50 views
1

在一個解決方案,我已經有了一個接口類IUSER和,在另一個項目中,一類實施用戶實施IUSERC#LINQ到實體:不支持的類型

上IUSER對象執行LINQ查詢我拋出以下異常:

指定的類型成員「用戶名」在LINQ是不支持的實體。僅支持初始化程序,實體成員和實體導航屬性。

你能幫我解決這個問題嗎?順祝商祺

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

您的用戶名屬性沒有set訪問。

如果你的財產沒有實現set訪問,實體框架不能設置在實體:)屬性

您需要定義用戶名二傳手,可以這樣做的價值在你的具體課堂上。

0

我通過這個使用.ToArray()。AsQueryable();在我的IQueryable結果中,在示例中,直接進入方法bank.Users()。

感謝您的幫助反正

問候

+0

當你將其轉換爲一個數組它從數據庫整個表中檢索所有行。然後你對沒有索引的內存數組運行查詢。 Linq to Objects可以使用任何字段,因此它可以使用只讀的UserName訪問器訪問基礎的user_name字段。如果你的用戶表變大,這將殺死你的應用程序。 – 2011-01-06 05:42:55

相關問題