Lazyload与删除(HasOne\HasMany的建议)

May 14, 2009 at 7:54 AM
Edited May 15, 2009 at 8:18 AM

建议HasOne\HasMany,增加一个删除选项,可以设置,在删除时,使用级联删除、还是设置引用为null、还是设置为默认值等。

May 15, 2009 at 8:03 AM

不知道是Bug还是故意这么设置的。关于Lazyload与删除

/// <summary>
/// 用户
/// </summary>
public abstract class MyUser : DbObjectModel<MyUser>
{
    public abstract string Name { get; set; }
    [HasOne]
    public abstract MyUserInfo Info { get; set; }
}
/// <summary>
/// 用户信息
/// </summary>
public abstract class MyUserInfo : DbObjectModel<MyUserInfo>
{
    public abstract string Email { get; set; }
    [BelongsTo, DbColumn("UserId")]
    public abstract MyUser User { get; set; }

}


[TestMethod()]
public void TestDelete1()
{
    MyUser user = MyUser.New();
    user.Name = "ikk_" + DateTime.Now.ToFileTime();

    MyUserInfo info = MyUserInfo.New();
    info.Email = "xxx@xx.com_" + DateTime.Now.ToFileTime();
    user.Info = info;
    user.Save(); //保存user和他的info

    //目前为止一切正常

    //记录Id
    long userId = user.Id;
    long infoId = info.Id;
    //重新读取user
    MyUser newUser = MyUser.FindById(userId);

    /**以下这句决定了测试的成败,注释掉就失败***/
    //string temp = newUser.Info.Email;
    /*****/

    newUser.Delete();

    //测试:
    //重新读取info
     MyUserInfo newInfo = MyUserInfo.FindById(infoId);
    //如果说info也会被删除,那么下面的测试会通过
     Assert.IsNull(newInfo);
}

Coordinator
May 18, 2009 at 6:43 AM

目前确实就是这么设计的:只处理已经读出的项。

对于这个问题,以后可能考虑增加 HasXXX 属性的参数,不过目前还没有计划。