Rules example code
This example shows how to use all of PLINQO's built-in rules. The AddSharedRules method adds them in code, and the Metadata class declares rules with attributes.
| Rule type | Rules |
|---|---|
| Validation | CompareRule, CustomRule, LengthRule, RangeRule, RegexRule, RequiredRule |
| Assignment (default values) | GuidRule, NowRule, UserNameRule, IpAddressRule, DefaultValueRule |
| Security | CreateRule, DeleteRule, UpdateRule |
using System;
using System.ComponentModel.DataAnnotations;
using CodeSmith.Data.Attributes;
using CodeSmith.Data.Rules;
using CodeSmith.Data.Rules.Assign;
using CodeSmith.Data.Rules.Security;
using CodeSmith.Data.Rules.Validation;
namespace Sample.Data
{
public partial class User
{
static partial void AddSharedRules()
{
//validation rules
RuleManager.AddShared<User>(new CompareRule<int>("Age", 21, ComparisonOperator.GreaterThanOrEqual));
RuleManager.AddShared<User>(new CustomRule<string>("UserName", "UserName must be unique.", UniqueUserName));
RuleManager.AddShared<User>(new LengthRule("FirstName", 100));
RuleManager.AddShared<User>(new RangeRule<int>("Age", 18, 21));
RuleManager.AddShared<User>(new RegexRule("Email", @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"));
RuleManager.AddShared<User>(new RequiredRule("Email"));
//assignment rules. These rules are to help in assigning default values
RuleManager.AddShared<User>(new GuidRule("UserId", EntityState.New));
RuleManager.AddShared<User>(new NowRule("CreatedDate", EntityState.New));
RuleManager.AddShared<User>(new NowRule("ModifiedDate", EntityState.Dirty));
RuleManager.AddShared<User>(new UserNameRule("CreatedBy", EntityState.New));
RuleManager.AddShared<User>(new UserNameRule("ModifiedBy", EntityState.Dirty));
RuleManager.AddShared<User>(new IpAddressRule("IpAddress", EntityState.Dirty));
RuleManager.AddShared<User>(new DefaultValueRule<int>("Score", 100, EntityState.New));
//security rules
RuleManager.AddShared<User>(new CreateRule("Administrators", "Users"));
RuleManager.AddShared<User>(new DeleteRule("Administrators"));
RuleManager.AddShared<User>(new UpdateRule("Administrators"));
}
//This is called by the custom rule. The first argument is the property value.
private static bool UniqueUserName(string username)
{
//check user name is unique;
return true;
}
#region Metadata
private class Metadata
{
// Only Attributes in the class will be preserved.
[Guid(EntityState.New)]
public Guid UserID { get; set; }
[Required]
public string UserName { get; set; }
[IpAddress(EntityState.Dirty)]
public string IpAddress { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
[DataType(DataType.EmailAddress)]
[RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*")]
public string Email { get; set; }
[StringLength(100)]
public string LastName { get; set; }
[Range(18, 21)]
public int Age { get; set; }
[Now(EntityState.New)]
public DateTime CreatedDate { get; set; }
[Now(EntityState.Dirty)]
public DateTime ModifiedDate { get; set; }
[UserName(EntityState.New)]
public string CreatedBy { get; set; }
[UserName(EntityState.Dirty)]
public string ModifiedBy { get; set; }
}
#endregion
}
}