Могу ли я сказать имя таблицы класса ActiveRecord в c #? - PullRequest
1 голос
/ 13 октября 2008

Я пытаюсь проверить, соответствует ли схема объектам, которые я инициализирую.

Есть ли способ получить TableName класса, кроме простого отражения имени класса?

Я использую какой-то класс с явными именами таблиц

Редактировать: используя решение Джо, я добавил случай, когда вы не указываете имя таблицы, возможно, он может использовать ограничение

public string find_table_name(object obj)
{
        object[] attribs = obj.GetType().GetCustomAttributes(typeof(Castle.ActiveRecord.ActiveRecordAttribute), false);

        if (attribs != null)
        {
            ActiveRecordAttribute attrib = (Castle.ActiveRecord.ActiveRecordAttribute) attribs[0];
            if (attrib.Table != null)
                return attrib.Table;
            return obj.GetType().Name;
        }
    return null;
}

Ответы [ 2 ]

3 голосов
/ 13 октября 2008

Если у вас есть что-то вроде следующего:

[ActiveRecord(Table = "NewsMaster")]
public class Article
{
    [PrimaryKey(Generator = PrimaryKeyType.Identity)]
    public int NewsId { get; set; }

    [Property(Column = "NewsHeadline")]
    public string Headline { get; set; }

    [Property(Column = "EffectiveStartDate")]
    public DateTime StartDate { get; set; }

    [Property(Column = "EffectiveEndDate")]
    public DateTime EndDate { get; set; }

    [Property]
    public string NewsBlurb { get; set; }
}

Это даст вам имя таблицы:

    [Test]
    public void Can_get_table_name()
    {
        var attribs = typeof(Article).GetCustomAttributes(typeof(Castle.ActiveRecord.ActiveRecordAttribute), false);

        if (attribs != null)
        {
            var attrib = (Castle.ActiveRecord.ActiveRecordAttribute) attribs[0];
            Assert.AreEqual("NewsMaster", attrib.Table);
        }
    }
2 голосов
/ 28 ноября 2008

Вы также можете использовать:

ActiveRecordModel.GetModel(typeof(Article)).ActiveRecordAtt.Table

см. этот тестовый пример

...