我有一个名为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'。 仅支持初始值设定项,实体成员和实体导航属性。“
感激不尽的任何帮助!
答案 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