0

MVC 3 사이트에서 Entity Framework를 사용하여 일대 다 관계를 처리하고 있습니다. 기본 테이블 (AgentTransmission) 모델 개체는 List의 보조 테이블 개체 (ClearninghouseParnters)를 포함합니다. EF 덕분에 ClearinghousePartnersFK 필드가 채워지고 저장되도록 AgentTransmission 개체를 저장하는 것 이상을 수행 할 필요가 없습니다.조건부로 보조 테이블 개체 저장

그러나 사용자에게 제공되는 양식에는 Clearinghouse 정보를 입력하는 5 개의 입력란이 있습니다.

enter image description here

각 행은 새로운 ClearinghousePartners 목록 항목 개체를 나타냅니다. 불행히도 각 개체는 데이터가 포함되는지 여부에 관계없이 데이터베이스에 저장됩니다. 이는 실제로 페이지를 표시하는 방법과 성능면에서 차이가 없지만 꽤 복잡한 테이블을 만들 수 있습니다.

내 질문은 : 값 중 하나를 ClearinghouseName, TradingPartnersName, 또는 StartDate 열에 존재하는 경우에만 ClearinghousePartners 목록 개체의 항목을 저장하는 엔티티 프레임 워크를 지시 할 수있는 방법이 있습니까?

마찬가지로 기존 ClearinghousePartners PK와 동일한 필드에 값/공백이없는 항목을 컨트롤러에 다시 게시하면 테이블에서 개체를 삭제하고 싶습니다.

차 표는 모델

참고 - 난 그냥 List

public partial class AgentTransmission 
{ 
    . 
    . 
    public virtual List<ClearinghousePartners> ClearinghousePartners { get; set; } 
} 

보조 테이블 모델

public partial class ClearinghousePartners 
{ 
    public int Id { get; set; } 
    public string ClearingHouseName { get; set; } 
    public string TradingPartnerName { get; set; } 
    public Nullable<System.DateTime> StartDate { get; set; } 
    public int AgtTransId { get; set; } //FK field corresponds to 'Id' on AgentTransmission 

    public virtual AgentTransmission AgentTransmission { get; set; } 
} 

을 보여주는거야, 그래서이 테이블은 필드의 큰 숫자를 포함 제어 LER

agenttransmission.LastChangeDate = DateTime.Now; 
agenttransmission.LastChangeOperator = Security.GetUserName(User); 
db.AgentTransmission.Add(agenttransmission); 
db.SaveChanges(); //Saves to both tables 

보기

   <fieldset id="ClearinghousePartners"> 
        <legend>Clearinghouse Partners</legend> 
        <center> 
         <table> 
          <thead> 
           <th>Clearinghouse Name</th> 
           <th>Trading Partner Name</th> 
           <th>Start Date</th>        
          </thead> 
          <tbody> 
           @for (int i = 0; i < Model.ClearinghousePartners.Count(); i++) 
           { 
            <tr align="center"> 
             @Html.HiddenFor(model => model.ClearinghousePartners[i].Id) 
             @Html.HiddenFor(model => model.ClearinghousePartners[i].AgtTransId) 
             <td>@Html.TextBoxFor(model => model.ClearinghousePartners[i].ClearingHouseName, new { style = "width: 100px" })</td> 
             <td>@Html.TextBoxFor(model => model.ClearinghousePartners[i].TradingPartnerName, new { style = "width: 100px" })</td> 
             <td>@Html.TextBoxFor(model => model.ClearinghousePartners[i].StartDate, new { style = "width: 100px" })</td>          
            </tr> 
           } 
          </tbody> 
         </table>        
        </center> 
       </fieldset> 

답변

1
가장 쉬운 방법은 사용자가 뭔가를 입력 한 즉, "null이 아닌"로 객체를 자격 어떤 조건을 해결하는 것입니다

, 그래서해야 구원 받으십시오. 그런 다음 POST에서 "null"인 항목을 목록에서 제거하십시오.

agenttransmission.ClearingHousePartners 
    .Where(m => string.IsNullOrWhitespace(m.ClearingHouseName)) 
    .Remove(); 

게시 된 이름 값이없는 경우 목록에서 항목을 제거합니다. 개체를 저장하지 말아야하는지 확인하기위한 추가 자격을 원하면 Where에 추가 절로 추가하십시오.

+0

좋은 아이디어, 감사합니다. 그러나 VS가'.Where()'다음에'.Remove()'를 인식하지 못하기 때문에'.RemoveAll()'을 사용하여 그 메소드에 술어를 넣어야했습니다. 고마워 – NealR