建议加一个直接读取BelongsTo字段的功能

Aug 25, 2009 at 4:27 AM
Edited Aug 25, 2009 at 4:30 AM

BelongsTo字段所保存的Key,是经常使用的,

如果,能加一个只读字段,去读取它就好了,而不必每次都,再去读取数据库。

例如加一个ReadOnlyAttribute   :),不知道这个是否有意义~

public abstract class User : DbObjectModel<User>
   
{
        public abstract string Name { get; set; }
        [HasOne]
        public abstract UserInfo Info{ get; set; }
    }

    public abstract class UserInfo : DbObjectModel<UserInfo>
   
{
        public abstract string Sex { get; set; }
        public abstract string Tel { get; set; }
        public abstract string Addr { get; set; }
        [BelongsTo,DbColumn("UserId")]
        public abstract User User { get; set; }
        [ReadOnly]
        public abstract long UserId { get; set; }   //这里可以直接获取数据库的 ("UserId")字段
    }


Coordinator
Aug 29, 2009 at 4:04 PM

这个问题我会考虑一下的。

Sep 5, 2009 at 4:51 PM

这个功能很赞。希望老大考虑。

我现在是用如下两种方法绕过这个问题.

1)设计 MODEL的时候直接设定long

2)

设定

        ///<summary>父类</summary>
        [BelongsTo, DbColumn("ParentId"), Index]
        public abstract vd_ToolBar Parent { get; set; }

        [Exclude]
        public abstract long ParentId { get; set; }

然后

            tbs = vd_ToolBar.FindAll();
            foreach (var tb in tbs)
            {
                ObjectInfo oi = ObjectInfo.GetInstance(tb.GetType());
                foreach (var m in oi.RelationFields)
                {
                    if (m.IsBelongsTo && m.Name == "ParentId")
                    {
                        var o = (IBelongsTo)m.GetValue(tb);
                        tb.ParentId = (long)o.ForeignKey;
                    }
                }
            }

这样虽然很不爽,但是,能凑合解决一些问题。

希望老大能把这个功能加进去。多谢~

 

Sep 5, 2009 at 4:57 PM

其实,最好是不加这个功能。

最好是读取BelongsTo的Id的时候不读数据库直接返回ForeignKey,读别的的时候读数据库。

不过我想不出咋实现暂时。

Sep 5, 2009 at 5:01 PM

把一个有ID的对象先赋给这个BelongsTo ,那么,如果NULL就是ID=0,如果不是NULL就是ID有值。

问题是如何判断读取的BelongsTo的属性到底是ID还是别的,这个要通过什么途径去监听,确实是一个难点。

Coordinator
Sep 6, 2009 at 2:18 AM

@Sipo

你和我的想法类似,不过确实有一些实现上的难点需要克服。