C# 我能说出c中ActiveRecord类的表名吗?

C# 我能说出c中ActiveRecord类的表名吗?,c#,castle-activerecord,C#,Castle Activerecord,我正在尝试验证模式是否与我正在初始化的对象匹配 除了简单地反映类名之外,还有什么方法可以获取类的表名吗 我正在使用一些具有显式表名的类 编辑:使用Joe的解决方案,我添加了不指定表名的情况,它可能会使用约束 public string find_table_name(object obj) { object[] attribs = obj.GetType().GetCustomAttributes(typeof(Castle.ActiveRecord.ActiveRecordAt

我正在尝试验证模式是否与我正在初始化的对象匹配

除了简单地反映类名之外,还有什么方法可以获取类的表名吗

我正在使用一些具有显式表名的类

编辑:使用Joe的解决方案,我添加了不指定表名的情况,它可能会使用约束

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;
}

如果您有以下内容:

[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);
        }
    }

如果您有以下内容:

[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);
        }
    }
您还可以使用:

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

您还可以使用:

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

请参见

是否可以反向执行此操作?IE:我想通过stringModelClassName获取模块,这样我就可以转到ModelClassName[]all_tag=ActiveRecordBase.FindAll??我一直在研究另一个问题,我认为需要通过使用相同的解决方案来解决这个问题,但要向后。希望这是有道理的。问题就在这里。这可以反过来做吗?IE:我想通过stringModelClassName获取模块,这样我就可以转到ModelClassName[]all_tag=ActiveRecordBase.FindAll??我一直在研究另一个问题,我认为需要通过使用相同的解决方案来解决这个问题,但要向后。希望这是有道理的。问题就在这里。这是访问模型表名的正确方法这是访问模型表名的正确方法