我的特定应用程序是使用实体框架的 ASP.NET MVC 应用程序。
我有一个对象 Entity0,其中包含对 Entity1 的引用(* 到 1)...
public class Entity_0
{
public int ID { get; set; }
public int Entity_1_ID { get; set; }
public Entity_1 Entity_1 { get; set; }
}
我在 Entity_0 中也有一些逻辑,但是这个逻辑要求 Entity_1 不能为空......
public Entity_2 GetEntity_2()
{
return new Entity_2() { Number = Entity_1.Value * 10 };
}
当通过控制器中的模型绑定创建 Entity_0 的新实例时,将设置 Entity_1_ID 属性,但是 Entity_1 导航属性保持为空,直到它被持久化到数据库中。
我需要调用 GetEntity_2() 并将 Entity_0 和 Entity_2 作为单个工作单元保存到数据库中。现在这意味着我必须在调用函数之前从存储库中手动检索 Entity_1 并将其分配给 Entity_0。
我考虑的另一个选项是使 Entity_1 成为 GetEntity_2 方法的参数,但是在其他任何时候调用该方法 Entity_1 都不会为空,因此需要一个参数是多余的。
所以显然现在一切正常,但我的问题是我是否违反了一些 OOP 设计规则,a)有一个可以抛出空引用异常的方法,或者 b)指定一个只应该使用的方法参数时间。
不得不手动分配导航属性真的让我很烦。我希望你们中的一些人对我如何改进这一点有一些建议。
谢谢!