gpt4 book ai didi

c# - Entity Framework 实体的 DI

转载 作者:太空宇宙 更新时间:2023-11-03 19:54:15 25 4
gpt4 key购买 nike

我想给一个实体添加一个验证类,这样它就可以在输入数据库之前检查它是否有效。 (检查是为了业务需求,而不是数据库约束)。

我有课

public class MyEntity
{
private readonly IValidatorFactory _validatorFactory;
public MyEntity(IValidatorFactory validatorFactory)
{
_validatorFactory = validatorFactory;
}

//Entity Properties Removed For Clarity

public void Validate()
{
if(_validatorFactory == null)
{
throw new ArgumentNullException("Validator Factory was null, cannot validate this item");
}

var validator = _validatorFactory.GetValidator(this.ItemTypeId);
valid = validator.Validate();

}
}

使用依赖项注入(inject),我正在努力了解如何在项目使用 EF6 时干净地解决依赖项。如果我返回一个 DbSet,它当然不知道验证器的要求。需要无参数构造函数。

最佳答案

首先,我认为您不应该尝试 use DI with your entities .验证也应该发生在您的实体本身内,而不是使用外部验证器(传递到 Validate 方法或使用 ValidatorFactory 创建)。

Entity Framework 有multiple ways to do validation built in .您尝试过其中任何一个吗?

最简单的形式是向属性添加属性,例如 RequiredStringLength .对于更复杂的验证,您可以让您的实体实现 IValidateObject或覆盖 DbContext.ValidateEntity .

使用这些方法中的任何一个 DbEntityValidationException当您调用 DbContext.SaveChanges 时验证失败时将被引发.您还可以通过调用 DbContext.GetValidationErrors 来触发验证而不抛出异常。 .

关于c# - Entity Framework 实体的 DI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35577632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com