我应该如何使用Entity Framework Entity Partial Classes?

时间:2011-09-30 21:42:42

标签: c# entity-framework entity-framework-4 entity-framework-4.1

我首先使用EF 4.1数据库。我想知道我可以使用Entity Partial Classes进行什么样的事情。我可能希望将哪些可能的功能添加到部分类中。我只是想了解我是否应该让我的实体更有能力,或者我是否应该在其他地方添加功能?对于我可能想要添加到我的实体的事情,是否有好的案例?

例如,我有一个具有各种子属性的实体,包含开始日期和结束日期。这些日期不得重叠。这是我应该在父实体上执行的吗?


好的,所以建议似乎是验证和业务逻辑。另外计算东西,以便DB没有计算列。


我应该将业务逻辑与实体框架实体联系起来吗?如果我想离开EF会怎么样?

由于

格雷姆

2 个答案:

答案 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有计算列时。