2014-03-12 32 views
0

这里是我的2种型号:MVC - 模型与ICollection的

VendorMapMessage:

public int ID { get; set; } 
    public string Name { get; set; } 
    public int VendorMapID { get; set; } 
    public VendorMap VendorMap { get; set; } 
    public int DocumentTypeID { get; set; } 
    public DocumentType DocumentType { get; set; } 
    public int IncidentTypeID { get; set; } 
    public IncidentType IncidentType { get; set; } 
    public ICollection<VendorMapMessagePropertyService> VendorMapMessagePropertyServices { get; set; } 
    public string MessageContent { get; set; }' 

VendorMapMessagePropertyService:

public int ID { get; set; }   
    public int VendorMapMessageID { get; set; } 
    public VendorMapMessage VendorMapMessage { get; set; } 
    public int PropertyTypeID { get; set; } 
    public PropertyType PropertyType { get; set; } 
    public int ServiceTypeID { get; set; } 
    public ServiceType ServiceType { get; set; } 

这是我的逻辑:

public VendorMapMessage SaveConfirmationMessage(VendorMapMessage source) 
    { 
     VendorMapMessage result = null; 
     try 
     { 
      using (var db = new ClientAdminContext()) 
      { 
       VendorMapMessage temp = null; 
       if (source.ID == default(int)) 
       { 
        temp = new VendorMapMessage(); 
        db.VendorMapMessages.Add(temp); 
        //techdebt remove 
        temp.ID = 84; 
        temp.IncidentTypeID = source.IncidentTypeID; 
        temp.DocumentTypeID = source.DocumentTypeID; 
        temp.MessageContent = source.MessageContent; 
       } 
       else 
       { 
        temp = db.VendorMapMessages.Single(o => o.ID == source.ID); 
       } 
       temp.IncidentTypeID = source.IncidentTypeID; 
       temp.DocumentTypeID = source.DocumentTypeID; 
       temp.MessageContent = source.MessageContent;      
       db.SaveChanges(); 
       result = temp; 
      } 
     } 
     catch (Exception ex) 
     { 
      //log 

      throw; 
     } 
     return result; 

这里是我的看法:

<label for="description" class="col-sm-4">Property Type</label> 
    <div class="col-md-7"> 
     <select class="form-control" name="PropertyTypeID" multiple id="prop_type"> 
     @foreach (PropertyType item in propertyTypes) 
      { 
      if (@Model.VendorMapMessagePropertyServices.Any(o => o.PropertyTypeID == item.ID)) 
      { 
      <option selected="selected" [email protected]>@item.Name</option> 
      } 
      else 
      { 
     <option [email protected]>@item.Name</option> 
      } 
     } 
     </select> 
    </div> 

ICollection VendorMapMessagePropertyService显示所有可用的属性类型。但我无法保存列出的属性类型。我缺少业务逻辑中的一行,它必须使用vendormapmessageID作为主键,并链接到vendormapmessagepropertyservices的propertytypeID。

混淆在vendormapmessagepropertyservice中连接PropertytypeID。 (我知道模型名称是废话,我不认为这会变得复杂)

回答

0

你的问题不太清楚,但它听起来像你想保存集合VendorMapMessagePropertyService s连接到VendorMapMessage?如果是这样,你可以这样做:

temp.VendorMapMessagePropertyServices = source.VendorMapMessagePropertyServices; 

在保存上下文的变化,这将节省新VendorMapMessagePropertyService S和它们与你的VendorMapMessage关联。

编辑根据评论:所以你想更新PropertyTypeIDVendorMapMessagePropertyService s已经存在?如果是这样,你需要从上下文获得它们,然后更新它们,就像这样:

// Get existing property services in the database 
IEnumerable<VendorMapMessagePropertyService> allExistingPropertyServices = db.VendorMapMessagePropertyServices; 
// Loop through property services from the source... 
foreach (VendorMapMessagePropertyService propertyService in source.VendorMapMessagePropertyServices) { 
    // Find existing property service 
    VendorMapMessagePropertyService existingPropertyService = allExistingPropertyServices.FirstOrDefault(x => x.ID == propertyService.ID); 

    // If found, update it 
    if (existingPropertyService != null) { 
     existingPropertyService.PropertyTypeID = propertyService.PropertyTypeID; 
    } 
} 

这将需要被修改,如果你也想补充一点,是在源代码,但不存在物业服务在数据库中。

+0

抱歉不清楚;你理解它是正确的!我已经那样了。我更具体的保存来自VendorMapMessagePropertyServices的propertytypeID。你认为我应该多提一下propertytypeID @mayabelle – Ethan

+0

我试着做这个'temp.VendorMapMessagePropertyServices.Select(x => x.PropertyTypeID)= source.VendorMapMessagePropertyServices.Select(x => x.PropertyTypeID);'仍然无法正常工作 – Ethan

+0

这不会起作用 - 您必须获取每个对象并更新每个对象。此外,任务的左侧不能像你所拥有的linq语句。看到我上面的更新。 – mayabelle