System.ComponentModel.DataAnnotations.Schema.ColumnAttribute не соответствует? - PullRequest
0 голосов
/ 19 ноября 2018

Кажется, у меня возникла проблема с атрибутом 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 все выглядит хорошо, и я получаю все поля заполнены 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 Как видите, MobileNumber и DepartmentNumber не заполняются, несмотря на то, что оба имеют значение в необработанном SQL выше.Более того, другие колонки с ColumnAttribute Mail, Country, TelephoneNumber работают просто отлично.Я уже несколько раз пытался проверить на наличие опечаток или скрытых пробельных символов. Если я вообще не использую атрибут ColumnAttribute и просто использую ключевое слово AS для перевода имен, я получаю все заполненные поля.

1 Ответ

0 голосов
/ 19 ноября 2018

Дубликат этого сообщения Я не знаю, почему, я не нашел этого, когда искал свою проблему, прежде чем опубликовать.Или почему это не было предложено, когда я писал свой пост.Это позор на самом деле.Тем не менее, поведение EF, уважающее атрибут иногда, а иногда нет, действительно странно.

...