2014-03-12 34 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