System.ComponentModel.DataAnnotations.Schema.ColumnAttribute不一致?

时间:2018-11-19 12:49:06

标签: c# entity-framework linq-to-sql attributes data-annotations

我似乎遇到了ColumnAttribute无法按预期工作的问题。
现在,我只想指出,我已经解决了我的问题,只需使用AS关键字根据C#属性为列命名,,但这不能解释ColumnAttribute 会发生什么。 如您在我的SQL中看到的那样,我应用了AS关键字来翻译列名,但是我省略了一些来显示问题。

在此执行SQL查询

var model = adsic.Database.SqlQuery<ADUser>(@"
    SELECT 
    [mail],
    [title] AS Title, 
    [c] AS Country,
    [department] AS Department,
    [company] AS Company,
    [mobile], 
    [telephoneNumber],
    [facsimileTelephoneNumber],
    [name] AS Name,
    [sAMAccountName] AS Username,
    [l] AS Location,
    [wWWHomePage] AS WebSite,
    [manager] AS Manager
    FROM openquery
    (ADSI,'SELECT 
        mail, title, c, department, company,
        mobile, telephoneNumber, facsimileTelephoneNumber, name, sAMAccountName,
        l, wWWHomePage, manager
        FROM ''LDAP://OU=Plus Pack,DC=global,DC=ns''
        WHERE objectClass = ''User'' AND objectCategory = ''person'' '
    )").AsQueryable().ToList();

如果我直接在SQL Server上运行此命令,一切看起来都很好,并且我填充了所有字段 SQL output

反映查询的C#模型

using System.ComponentModel.DataAnnotations.Schema;
public class ADUser
{
    //[Key]
    //[Column("distinguishedName")]
    //public string DistinguishedName { get; set; }

    [Column("mail")]
    public string Mail { get; set; }

    //[Column("title")]
    public string Title { get; set; }

    [Column("c")]
    public string Country { get; set; }

    //[Column("department")]
    public string Department { get; set; }

    //[Column("company")]
    public string Company { get; set; }

    [Column("mobile")]
    public string MobileNumber { get; set; }

    [Column("telephoneNumber")]
    public string TelephoneNumber { get; set; }

    [Column("facsimileTelephoneNumber")]
    public string DepartmentNumber { get; set; }

    //[Column("sAMAccountName")]
    public string Username { get; set; }

    //[Column("l")]
    public string Location { get; set; }

    //[Column("wWWHomePage")]
    public string WebSite { get; set; }

    //[Column("manager")]
    public string Manager { get; set; }

    //[Column("cn")]
    public string Name { get; set; }
}

现在是粗略部分。我在C#中进行模型转换后调试结果。 C# debug session 如您所见,尽管上面的原始SQL中都有值,但MobileNumber和DepartmentNumber并未填充。更重要的是,其他具有ColumnAttribute Mail,Country,TelephoneNumber的列也可以正常工作。我已经尝试过几次检查拼写错误或隐藏的空白字符。 如果我根本不使用ColumnAttribute,而仅使用AS关键字进行名称转换,则会填充所有字段。

1 个答案:

答案 0 :(得分:1)

this post重复 我不知道为什么,我在发布之前搜索问题时没有找到这个。或者为什么当我写我的帖子时没有建议。真的很遗憾。 尽管如此,EF有时甚至不尊重该属性的行为确实很奇怪。