未使用列属性EF 6映射的Guids

时间:2015-02-06 00:00:03

标签: entity-framework stored-procedures mapping guid

存储过程的结果不能正确映射FOR GUID(SQL中的uniqueidentifier)

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();

Site类如下所示

 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三个属性映射正常。外壳似乎没有效果,但是下划线间距导致了我的问题。有没有办法映射到存储过程?我不能对存储过程进行任何更改而不会引起严重的问题。

2 个答案:

答案 0 :(得分:1)

getting Entity Framework raw query to respect attributes

因此,您遇到的问题是EF实际上忽略了您在列上添加的属性。它看起来并没有像在EF 7中那样固定好运。

答案 1 :(得分:0)

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

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

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

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

参考文献:

Mapping a CLR Property to a Specific Column in the Database

Mapping Tables And Columns using Data Annotations