有条件地保存辅助表对象

时间:2014-05-12 18:32:47

标签: c# asp.net-mvc asp.net-mvc-3 entity-framework entity-framework-4.1

我在ASP MVC 3网站中使用Entity Framework来处理一对多的关系。主表(AgentTransmission)模型对象包含List个辅助表对象(ClearninghouseParnters)。感谢EF,我不需要做任何事情,只需保存AgentTransmission FK ClearinghousePartners字段的ClearinghousePartners对象即可填充并保存。

但是,用户获取的表单有五个字段用于输入商标信息交换机构信息。

enter image description here

每行代表一个新的ClearinghousePartners列表项对象。不幸的是,每个对象都被保存到数据库中,无论它是否包含数据。这在性能方面甚至在页面的显示方式上确实没有什么不同,但是它会产生一个非常混乱的表格。

我的问题是:如果ClearinghouseNameTradingPartnersName或{{中存在值,是否有办法指示实体框架仅保存StartDate列表对象中的项目1}}列?

同样我想从表中删除对象,如果我们发现一个项目回发到控制器,并且在同一个字段中没有值{/ 1}} PK且没有值/空白。

主要表格模型

仅供参考 - 此表包含大量字段,因此我只显示ClearinghousePartners

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; }
}

查看

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

1 个答案:

答案 0 :(得分:1)

最简单的方法是找出一些条件,将对象限定为“非null”,即用户为其输入了一些内容,因此应该保存它。然后,从POST列表中删除“null”的任何项目。

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

如果发布的名称值为空,那么将从列表中删除任何项目。如果您想要其他资格来确定不应保存该对象,只需将它们添加为Where中的附加条款。