Guids未使用列属性EF 6进行映射



存储过程的结果没有正确映射仅用于GUID(SQL中的唯一标识符)

menu.Sites = db.Database
.SqlQuery<Site>("get_application_sitemap @application_user_id, @application_name", 
new SqlParameter("application_user_id",id), 
new SqlParameter("application_name",applicationName)).ToList();

站点类别显示在下方

 public class Site : EntityBase
{
    public Guid ApplicationWebpageGuid
    {
        get { return application_webpage_guid; }
    }
    public Guid application_webpage_guid { get; set; }
    public Guid? ParentApplicationWebpageGuid
    {
        get { return parent_application_webpage_guid ?? Guid.Empty; }
    }
    public Guid? parent_application_webpage_guid { get; set; }
    public string Name { get; set; }
    public string Url { get; set; }
    public int Children { get; set; }
}

主要问题是存储过程中的列名是小写和下划线分隔的。我"映射"的方式和我松散地使用这个术语的方式不是我喜欢的。Name、Url和Children这三个属性映射良好。大小写似乎没有任何效果,但下划线间距给我带来了问题。是否有映射到存储过程的方法?我无法对存储的proc进行任何更改而不引起严重的头痛。

获取实体框架原始查询以尊重属性

因此,您遇到的问题是EF实际上忽略了您在列上设置的属性。看起来他们没有在英孚7中修复它,所以祝你好运。

在实体框架中,您可以使用FluentAPI映射列名,如下所示:

modelBuilder.Entity<Site>() 
            .Property(t => t.ParentApplicationWebpageGuid) 
            .HasColumnName("parent_application_webpage_guid");

或者使用这样的数据注释:

[Column(“parent_application_webpage_guid")] 
public String ParentApplicationWebpageGuid {get;set;}

参考文献:

将CLR属性映射到数据库中的特定列

使用数据注释映射表和列