EntityType在postgres存储的函数调用上未定义键

时间:2018-12-04 07:59:16

标签: asp.net-mvc postgresql entity-framework

如何消除此错误。

  

EntityType'String_concept_attributesModel'没有定义键。定义此EntityType的密钥。

我正在尝试从.net mvc控制器上的Postgres数据库中调用函数,它应该以Json数据类型返回结果。

int

我的实体看起来像:

[HttpPost]
    public JsonResult ajaxmethod(string test)
    {
        if (test == null)
        {
            return Json(new
            {
                msg = "there is no string",
                id = 0,
                destination = 000000,
                hierarchy = 00000
            });
        }
        using (var db = new PGDbContext())
        {
            var cmd = db.Database.Connection.CreateCommand();
            cmd.CommandText = "public.kp_string_to_concept_attributes";

            try
            {
               db.Database.Connection.Open();
               var source = new SqlParameter("@source_string", test);

                var result = db.Database.SqlQuery<String_concept_attributesModel>("public.kp_string_to_concept_attributes @source_string", source).ToList();

                if(!result.Any())
                {
                    return Json(new
                    {
                        msg = "Empty list",
                        id = 00000,
                        destination = 000000,
                        hierarchy = 00000
                    });
                }

                return Json(new
                {
                    msg = "all done",
                    id = result.First().concept_id,
                    destination = result.First().attribute_id,
                    hierarchy = result.First().description_id
                });
            }
            finally
            {
                db.Database.Connection.Close();
            }
        }

我不能将键放在某些行的顶部,因为所有这些都不是唯一的。 那么,如何为此定义密钥? PS。实体框架和postgresql之间的连接是通过使用“数据库中的代码优先”实现的-因此,我没有任何这些edmx文件。

1 个答案:

答案 0 :(得分:0)

总是有一个主键是一个好习惯。添加字段公共字符串ID {get;组;} 到String_concept_attributesModel和数据库,并使其自动递增。这应该可以解决问题。 (由于它被称为“ id”,因此实体框架将知道它应该是主键,因此您不必使用[Key])