【问题标题】:Specified type member"Status" not supported in LINQ to EntitiesLINQ to Entities 不支持指定类型成员“状态”
【发布时间】:2012-09-28 10:35:56
【问题描述】:

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

感谢您的帮助!

【问题讨论】:

  • 什么是.net framework版本和EntityFramework版本?

标签: c# asp.net-mvc linq


【解决方案1】:

如果你没有使用 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

【讨论】:

  • 得到一个类似这样的错误:传入字典的模型项是“Sample.Models.SmsContent”类型,但是这个字典需要一个“System.Collections.Generic.IEnumerable”类型的模型项1[Sample.Models.SmsContent]'.
【解决方案2】:

您得到这个的原因是因为您的 LINQ 查询正在转换为 SQL 查询,并且由于您已使用 [NotMapped] 属性指定了 Status 属性,因此它无法在表架构中找到该列并因此生成错误

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-01-27
      • 2012-07-17
      • 2013-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      • 2015-07-25
      相关资源
      最近更新 更多