0

我有一个名为 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 不支持指定的类型成员'状态'。仅支持初始化程序、实体成员和实体导航属性。”

任何帮助都感激不尽!

4

3 回答 3

3

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

于 2012-10-08T07:45:54.263 回答
0

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

于 2012-10-08T07:45:36.033 回答
0

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

改变你的模型

添加新属性

public int StatusValue { get; set; }

然后将另一个更改为

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

然后在所有 linq to entity 查询中,使用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
于 2012-10-08T09:18:53.140 回答