我首先使用EF 4.1数据库。我想知道我可以使用Entity Partial Classes进行什么样的事情。我可能希望将哪些可能的功能添加到部分类中。我只是想了解我是否应该让我的实体更有能力,或者我是否应该在其他地方添加功能?对于我可能想要添加到我的实体的事情,是否有好的案例?
例如,我有一个具有各种子属性的实体,包含开始日期和结束日期。这些日期不得重叠。这是我应该在父实体上执行的吗?
好的,所以建议似乎是验证和业务逻辑。另外计算东西,以便DB没有计算列。
我应该将业务逻辑与实体框架实体联系起来吗?如果我想离开EF会怎么样?
由于
格雷姆
答案 0 :(得分:1)
例如,MVC等框架在部分类中使用了Validatable Objects和MetadataType属性。
以下是使用MetadataType属性的示例:
[MetadataType(typeof(UserMetadata))]
public partial class User
{
private class UserMetadata
{
[DisplayName("User Id")]
public long UserId
{
get;
set;
}
[DisplayName("User Name")]
public string UserName
{
get;
set;
}
}
}
当您使用MVC框架时,将读取具有这些属性的任何模型,以便为相应的显示/编辑器自动生成标签字段。
使用IValidatableObject的示例
public partial class Apple : IValidatableObject // Assume the Apple class has an IList<Color> property called AvailableColors
{
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
foreach (var color in this.AvailableColors)
{
if (color.Name == "Blue") // No blue apples, ever!
{
yield return new ValidationResult("You cannot have blue apples.");
}
}
}
}
MVC将接受这个IValidatableObject并确保任何通过它的验证步骤的Apple都不会出现蓝色。
修改强>
作为使用IValidatableObject的日期范围问题的示例:
public partial class ObjectWithAStartAndEndDate : IValidatableObject
{
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (this.StartDate >= this.EndDate)
{
yield return new ValidationResult("Start and End dates cannot overlap.");
}
}
}
答案 1 :(得分:1)
我用它来用计算值扩充我生成的类,当我不想让DB有计算列时。