C# “指定类型成员”;“地位”;LINQ to实体中不支持

C# “指定类型成员”;“地位”;LINQ to实体中不支持,c#,asp.net-mvc,linq,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 { ge

我有一门课叫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>
@model IEnumerable
var model=@Html.Raw(Json.Encode(model));
对于(模型中的var m){
console.log(m.Content);
}
但我得到了错误 “LINQ to实体中不支持指定的类型成员“状态”。 仅支持初始值设定项、实体成员和实体导航属性。“


感谢您的帮助

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

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

您之所以得到这个结果,是因为您的LINQ查询正在转换为SQL查询,并且您已经指定了
状态
属性,它在表架构中找不到该列,因此生成错误。之所以出现此错误,是因为您的LINQ查询正在转换为SQL查询,并且您已使用
[notmap]
属性指定了
状态
属性,如果您不使用EF 5.0,它在表架构中找不到该列,因此会生成错误(以前的版本不能直接使用enum)

改变你的模式

添加新属性

public int StatusValue { get; set; }
然后将另一个更改为

[NotMapped]
public SmsContentStatus Status 
{ 
   get {return (SmsContentStatus)StatusValue;}
   set {StatusValue = Convert.ToInt32(value); }
}
然后在所有linq to实体查询中,使用
int
属性(
StatusValue

编辑

如果视图必须表示列表,请将查询更改为

var content = db.SmsContents.Where(p => p.StatusValue == (int)status);
如果必须表示单个对象,请将视图的模型更改为

@model Sample.Models.SmsContent

如果您未使用EF 5.0(早期版本不能直接使用枚举)

改变你的模式

添加新属性

public int StatusValue { get; set; }
然后将另一个更改为

[NotMapped]
public SmsContentStatus Status 
{ 
   get {return (SmsContentStatus)StatusValue;}
   set {StatusValue = Convert.ToInt32(value); }
}
然后在所有linq to实体查询中,使用
int
属性(
StatusValue

编辑

如果视图必须表示列表,请将查询更改为

var content = db.SmsContents.Where(p => p.StatusValue == (int)status);
如果必须表示单个对象,请将视图的模型更改为

@model Sample.Models.SmsContent

什么是.net framework版本和EntityFramework版本?什么是.net framework版本和EntityFramework版本?获取如下错误:传入字典的模型项类型为“Sample.Models.SmsContent”,但此字典需要类型为“System.Collections.Generic.IEnumerable”1的模型项[Sample.Models.SmsContent]”。获取如下错误:传入字典的模型项的类型为“Sample.Models.SmsContent”,但此字典需要类型为“System.Collections.Generic.IEnumerable`1[Sample.Models.SmsContent]”的模型项。