我在我的ASP MVC 3站点中使用实体框架来处理一对多关系。主表(AgentTransmission
)模型对象包含List
次表表格对象(ClearninghouseParnters
)。感谢EF,我不需要做任何事情,只需保存ClearinghousePartners
的FK
字段的AgentTransmission
对象来填充和保存。有条件保存辅助表对象
但是,用户获得的表单有五个用于输入Clearinghouse信息的字段。
的每一行代表一个新的ClearinghousePartners
列表项的对象。不幸的是每个对象都被保存到数据库中,不管它是否包含数据。这并没有改变性能,甚至不显示页面的显示方式,但它会造成一张相当凌乱的表格。
我的问题是:有没有一种方法来指示实体框架仅保存在ClearinghousePartners
列表对象的项目,如果存在价值无论是在ClearinghouseName
,TradingPartnersName
或StartDate
列?
同样我想从表格中删除对象,如果我们发现一个项目发布回控制器并且存在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>
好主意,谢谢。但是,我不得不使用'.RemoveAll()'并将Predicate放在该方法中,因为VS在'.Where()'之后不会识别'.Remove()'。谢谢 – NealR