A very Import Method

Dec 24, 2009 at 3:42 PM
Edited Dec 24, 2009 at 3:44 PM

public TKey GetForeignKey(string Name)
        {
            ObjectInfo oi = ObjectInfo.GetInstance(this.GetType());
            foreach (MemberHandler m in oi.RelationFields)
            {
                if (m.Name == Name) {
                    var x=(IBelongsTo)m.GetValue(this);
                    return (TKey)(x).ForeignKey;
                }
            }

            throw new Exception("Not Found Key");
        }

 

我把这个方法加在了[Serializable]
    public class DbObjectModel<T, TKey> : DbObjectModelBase<T, TKey> where T : DbObjectModel<T, TKey>
    {

里面

我觉得很好用

这样获取Id的时候不需要再执行SQL了。老大能把这个方法(或者改个名)加在源码中吗?

但是我觉得有个缺陷,就是不面向对象。

传入的现在是string Name要是能传入IDbObject对象然后获取Property Name就好了,但是我找了N多方法,也不知怎么把Property的Name提取出来。

 

 

Dec 24, 2009 at 3:46 PM

另外,Lephone.Data既然是3.5的可以oi.RelationFields.Single(p=>p.Name==Name).GetValue(this);

Dec 25, 2009 at 2:23 AM

[Exclude]
        public long PageId { get { return this.GetForeignKey("PageId"); } }

Coordinator
Dec 25, 2009 at 2:31 AM

你的这种实现确实让Model有些不干净,先写成Extend Method吧:

public static class SipoExtends
{
    public static TKey GetForeignKey<T, TKey>(this DbObjectModel<T, TKey> obj, string name) where T : DbObjectModel<T, TKey>
    {
        var oi = ObjectInfo.GetInstance(typeof(T));
        return (TKey)((IBelongsTo)oi.RelationFields.Single(p => p.Name == name).GetValue(obj)).ForeignKey;
    }
}

使用方法一样。

Dec 25, 2009 at 5:30 AM

为什么我在外部写了扩展方法却看不见?

Dec 25, 2009 at 6:19 AM

哦namespace 用错了