Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC/EF:如何处理新实体上的导航属性?_Asp.net Mvc_Entity Framework_Unit Of Work - Fatal编程技术网

Asp.net mvc ASP.NET MVC/EF:如何处理新实体上的导航属性?

Asp.net mvc ASP.NET MVC/EF:如何处理新实体上的导航属性?,asp.net-mvc,entity-framework,unit-of-work,Asp.net Mvc,Entity Framework,Unit Of Work,我的特定应用程序是一个使用实体框架的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; } } 我在实体_0中也有一些逻辑,但是这个逻辑要求实体_1不为空 public E

我的特定应用程序是一个使用实体框架的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; }
}
我在实体_0中也有一些逻辑,但是这个逻辑要求实体_1不为空

public Entity_2 GetEntity_2()
{
    return new Entity_2() { Number = Entity_1.Value * 10 };
}
当通过控制器中的模型绑定创建实体_0的新实例时,将设置实体_1_ID属性,但实体_1导航属性在持久化到数据库之前保持为空

我需要调用GetEntity_2(),并将Entity_0和Entity_2作为单个工作单元保存到数据库中。现在这意味着在调用函数之前,我必须手动从存储库中检索实体_1并将其分配给实体_0

我考虑的另一个选项是使Entity_1成为GetEntity_2方法的参数,但是该方法在任何其他时间被称为Entity_1时都不会为null,因此需要一个参数是多余的

很明显,现在一切都正常,但我的问题是,我是否违反了OOP设计规则,a)使用了一个可能引发空引用异常的方法,或b)指定了一个只应在某些时间使用的方法参数

必须手动分配导航属性真的让我很烦恼。我希望你们中的一些人能对我如何改进这一点提出一些建议


谢谢

啊,这比我想象的要容易得多

将对象添加到上下文后,将填充导航属性实体_1。在调用SaveChanges()并将其持久化到数据库之前,我一直认为它是空的

这使得调用代码变得很容易,如下所示

var entity_1 = Entity_1CreateViewModel.Entity_1;
entitiesRepository.Add(entity_1);
entitiesRepository.Add(entity_1.GetEntity_2());
entitiesRepository.Save();