2012-10-08 37 views
0

我有一個名爲PanContent指定的類型成員「狀態」不支持LINQ到實體

public class PanContent 
    {   
     public int Id { get; set; }   
     public string Description { get; set; } 
     public string Content { get; set; }    

     public PanContentStatus Status { get; set; } 
     public ActivityId ActivityId { get; set; }  
    } 

階級和我有一個枚舉類型PanContentStatus

public enum PanContentStatus 
    { 
     Active = 0, 
     Partial, 
     Inactive, 
     Deleted 
    } 

我試圖用這個我控制器

public ActionResult Index() 
    { 
     var db = new TlDbContext(); 
     var status = PanContentStatus.Partial; 

     var content = db.PanContents.Where(p => p.Status == status).FirstOrDefault(); 
     if (content != null) 
     { 
      return View(content); 
     } 
     else 
     { 
      return View(); 
     } 
    } 

,然後用它在我看來

@model IEnumerable<Sample.Models.PanContent> 
<script type="text/javascript"> 
    var model = @Html.Raw(Json.Encode(Model)); 
    for (var m in model) { 
       console.log(m.Content); 
      } 
</script> 

但我收到錯誤 「LINQ to Entities不支持指定的類型成員'狀態'。 只有初始化,實體成員和實體導航屬性都支持。」

任何幫助感激地接受!

+1

.net框架的版本和EntityFramework的版本是什麼? –

回答

0

如果你不使用EF 5.0(之前的版本不能直接使用ENUM)

變化模型

增加新屬性

public int StatusValue { get; set; } 

然後換另

[NotMapped] 
public SmsContentStatus Status 
{ 
    get {return (SmsContentStatus)StatusValue;} 
    set {StatusValue = Convert.ToInt32(value); } 
} 

然後在所有linq實體查詢,請使用int屬性(StatusValue

var status = SmsContentStatus.Partial; 
var content = db.SmsContents.Where(p => p.StatusValue == (int)status).FirstOrDefault(); 
//or rather db.SmsContents.FirstOrDefault(p => p.StatusValue == (int)status); 
//but that's a detail. 

編輯

,如果您的視圖必須代表一個列表,您的查詢更改爲

var content = db.SmsContents.Where(p => p.StatusValue == (int)status); 

,如果它必須代表一個對象,更改您的視圖模型來

@model Sample.Models.SmsContent 
+0

得到如下錯誤:傳入字典的模型項目類型爲'Sample.Models.SmsContent',但此字典需要類型爲'System.Collections'的模型項目。 Generic.IEnumerable'1 [Sample.Models.SmsContent]」。 – super

+0

@bios請參閱編輯此(不同)問題 –

0

你應該映射您SmsContentStatus實體或使用一些statusId也應該映射。

3

原因你得到這個是因爲你的LINQ查詢正在轉換爲SQL查詢,並且由於你指定了Status屬性和[NotMapped]屬性,所以無法找到表格模式中的列並因此生成錯誤

+0

我已將其刪除但顯示相同的錯誤 – super

相關問題