Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Vb.net 如何从实体框架中的细节部分检索主-细节关系的主部分中的字段值_Vb.net_Entity Framework - Fatal编程技术网

Vb.net 如何从实体框架中的细节部分检索主-细节关系的主部分中的字段值

Vb.net 如何从实体框架中的细节部分检索主-细节关系的主部分中的字段值,vb.net,entity-framework,Vb.net,Entity Framework,我的实体模型中有一个主-细节关系(为了便于理解经典的Northwind Orders OrderDetails),最终用户将在网格中输入主零件的细节,然后向下移动到较低的网格以输入“相关”细节 在实体模型本身中,我希望每次创建与该订单相关的新OrderDetail记录并使用它检索每个细节记录中需要的特定信息时,都能够从Orders表中检索到与“CustomerId”值等效的值 在实体模型本身中是否有一种简单的方法可以做到这一点。我将在vb中完成这项工作,但我几乎可以阅读C 其他澄清信息: 杰里奇

我的实体模型中有一个主-细节关系(为了便于理解经典的Northwind Orders OrderDetails),最终用户将在网格中输入主零件的细节,然后向下移动到较低的网格以输入“相关”细节

在实体模型本身中,我希望每次创建与该订单相关的新OrderDetail记录并使用它检索每个细节记录中需要的特定信息时,都能够从Orders表中检索到与“CustomerId”值等效的值

在实体模型本身中是否有一种简单的方法可以做到这一点。我将在vb中完成这项工作,但我几乎可以阅读C

其他澄清信息:

杰里奇在他的回答中提出了一个有趣的观点,我对此表示感谢,这表明该表可能没有正常化。在任何正常情况下,我都会同意,但在这里,我受到了我无法控制的约束。Tis是用于记录商业渔民捕鱼的应用程序。每次登岸可能包括几种不同的鱼类,所有登岸细节必须依法报告给政府机构,政府机构反过来将信息传递给科学家,科学家利用这些信息计算鱼类种群,从而计算捕捞限额

为此,准确捕获鱼的位置非常重要,因此每条线细节(着陆细节线)必须记录捕获鱼的区域和区域。对于大多数小船来说,这一信息几乎总是相同的(但出海数月的大船可以在多个区域捕鱼(因此需要)

为了使应用程序的最终用户能够更轻松地完成这项工作,我认为在船只记录中记录默认区域的详细信息(相当于Northwind客户)是有意义的。在着陆标题表(Northwind订单)中,我有一个对vesselId的引用。因此,在输入着陆详细信息行时,我希望返回着陆标题并检索船舶ID,然后将其用作函数中的参数,以检索与该船舶相关的默认区域

由于我正在使用实体框架来做这件事,我还不知道着陆的最终ID是什么(它还没有提交,实体框架的美妙之处在于它使这类数据输入变得容易),所以我试图从着陆头获取船舶ID,而着陆头还没有为其创建“官方”ID

我希望这对于一个在大多数情况下(包括我自己)会促使人们认为这是一个数据库规范化问题的问题更有意义

我想做的是在landing detail实体的On PropertyChange事件之一中找到一种方法来检索其关联的landing header实体的vesselId,该实体尚未提交到数据库。它在clientcache中,但尚未在数据库中


非常感谢

如果我答对了您的问题,您是说OrderDetail实体中有一些属性是基于您的客户实体填充的。我觉得这很奇怪,因为您应该能够通过遍历从OrderDetail到Order到Customer的链接,从OrderDetail实体查询任何客户详细信息。您不需要在OrderDetail表下保留客户属性(例如性别)。您可能需要考虑尝试更好地规范模式。< /P> 在任何情况下,假设您拥有以下实体:

public class Customer {
    [Key]
    public int Id {get; set;}
    public string Name {get; set;}
    public string Gender {get; set;}
    public virtual ICollection<Order> Orders {get; set;} //<-- I'm also assuming you have a 1 Customer to Many Order relationship
}


public class Order {
    [Key]
    public int Id {get; set;}
    [Required]
    public int CustomerId {get; set;}
    public virtual Customer Customer {get; set;} //<-- assumes a Customer Entity also exists
    public virtual ICollection<OrderDetail> OrderDetails {get; set;} //<-- I'm also assuming you have a 1 Order to Many Order Detail relationship
}

public class OrderDetail {
     [Key]
     public int Id {get;set;}
     [Required]
     public int OrderId {get; set;} //<-- each Order Detail *must* be linked to an order
     public virtual Order Order {get; set;}
     public string CustomerGender {get; set;} //<-- property that gets populated based on the customer that is related to the parent Order of this detail
     //other properties
 }
在插入方法中,您希望确保在插入之前获得客户详细信息并填充orderDetail中的相关字段。因为您知道OrderId,所以可以使用LINQ查询相关的客户详细信息。在本例中,我们希望获取Customer.Gender并将其分配给OrderDetail.CustomerGender。你可以用一句话把它写出来,但为了便于阅读,我会把它分解

//step 1, get the Customer object based on the OrderId
var cust = context.Set<Order>().Include(o => o.Customer)
                  .Where(o => o.Id == orderDetail.OrderId)
                  .Select(o => o.Customer).SingleOrDefault();

//step 2, assign the Customer object property to the OrderDetail instance
orderDetail.CustomerGender = customer.Gender;

//step 3, persist the orderDetail entity
context.Set<OrderDetail>().Add(orderDetail);
context.SaveChanges();
//步骤1,根据OrderId获取Customer对象
var cust=context.Set().Include(o=>o.Customer)
.Where(o=>o.Id==orderDetail.OrderId)
.Select(o=>o.Customer).SingleOrDefault();
//步骤2,将Customer对象属性分配给OrderDetail实例
orderDetail.CustomerGender=customer.Gender;
//步骤3,持久化orderDetail实体
context.Set().Add(orderDetail);
SaveChanges();
使“CustomerId”成为“Order”类的成员。
//step 1, get the Customer object based on the OrderId
var cust = context.Set<Order>().Include(o => o.Customer)
                  .Where(o => o.Id == orderDetail.OrderId)
                  .Select(o => o.Customer).SingleOrDefault();

//step 2, assign the Customer object property to the OrderDetail instance
orderDetail.CustomerGender = customer.Gender;

//step 3, persist the orderDetail entity
context.Set<OrderDetail>().Add(orderDetail);
context.SaveChanges();