0

我们使用 sqlmetal 生成我们的 DBML,通过转换运行它,然后使用 sql metal 生成 DataContext 类——此外,我想根据我们存储在数据库中的一些元数据自动为实体生成一些验证每个实体及其属性。例如,如果一个实体具有我所知道的元类型“电子邮件”的“电子邮件地址”字段,我想为电子邮件实体创建 OnValidate 方法以检查它是否符合我的正则表达式。这一切都很好,花花公子,我可以在另一个文件中这样做:

public partial class MYENTITY
{
    partial void OnValidate(System.Data.Linq.ChangeAction action)
    {
        if(action != System.Data.Linq.ChangeAction.Delete)
        {
            //check the validity of my email field or anything else
        }
    }
}

我怎样才能做到这一点,同时仍然允许想要使用此 DataContext 的开发人员将他们自己的逻辑挂钩到此实体的 OnValidate 方法中?在我们的情况下,这将是特定于正在开发的应用程序的业务逻辑。我在上面描述的添加只是为了确保进入数据库的数据符合我的预期。

谢谢你的帮助。新来的,如果我做错了什么,请道歉。

4

1 回答 1

1

如果我理解正确,您希望能够使用您的元数据在特定文件中动态生成 OnValidate 方法,但仍允许您的开发人员向 OnValidate 方法添加自定义?一种方法是使用此模板生成代码:

public partial class MYENTITY
{
    partial void OnValidateCustomization();

    public void OnValidate(System.Data.Linq.ChangeAction action)    
    {        
        if(action != System.Data.Linq.ChangeAction.Delete)        
        {            
            //hook for code generator
        }   
        OnValidateCustomization();
    }
}

并让您的开发人员在另一个文件或同一文件中,具体取决于您在运行动态代码文件生成时如何处理现有文件,实现 OnValdateCustomization() 方法:

public partial class MYENTITY
{
    partial void OnValidateCustomization()
    {
         Console.WriteLine("I Worked.");
    }
}

但是,我正在假设您如何动态生成代码。当您再次运行动态代码生成器时,您是否也不能将令牌放入生成的文件中并允许修改文件而不是仅仅复制它们?所以你只是注入这些令牌而不是替换整个文件?啊,这是缺少的细节...

于 2009-08-15T03:31:19.617 回答