1

スキーマが初期化中のオブジェクトと一致するかどうかを確認しようとしています。

単にクラス名を反映する以外に、クラスの TableName を取得する方法はありますか?

明示的な TableNames を持つクラスを使用しています

編集:ジョーのソリューションを使用して、テーブル名を指定しない場合を追加しました。おそらく制約を使用できます

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

2 に答える 2

3

次のようなものがある場合:

[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);
        }
    }
于 2008-10-13T16:58:21.017 に答える
2

以下を使用することもできます。

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

このテストケースを参照してください

于 2008-11-28T12:18:51.030 に答える