C# “指定类型成员”;“地位”;LINQ to实体中不支持
我有一门课叫PanContentC# “指定类型成员”;“地位”;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
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]”的模型项。