LINQ to Entities中不支持指定的类型成员“Status”

时间:2012-10-08 07:40:27

标签: c# asp.net-mvc linq

我有一个名为PanContent的课程

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中不支持指定的类型成员'Status'。 仅支持初始值设定项,实体成员和实体导航属性。“

感激不尽的任何帮助!

3 个答案:

答案 0 :(得分:3)

你得到这个的原因是因为你的LINQ查询被转换为SQL查询,并且你已经指定Status属性[NotMapped]属性,它找不到表模式中的列,因此产生错误

答案 1 :(得分:0)

您应该映射您的SmsContentStatus实体或使用一些也应映射的statusId。

答案 2 :(得分:0)

如果您没有使用EF 5.0(以前的版本不能直接使用枚举)

更改模型

添加新属性

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