我在ASP MVC 3网站中使用Entity Framework来处理一对多的关系。主表(AgentTransmission
)模型对象包含List
个辅助表对象(ClearninghouseParnters
)。感谢EF,我不需要做任何事情,只需保存AgentTransmission
FK
ClearinghousePartners
字段的ClearinghousePartners
对象即可填充并保存。
但是,用户获取的表单有五个字段用于输入商标信息交换机构信息。
每行代表一个新的ClearinghousePartners
列表项对象。不幸的是,每个对象都被保存到数据库中,无论它是否包含数据。这在性能方面甚至在页面的显示方式上确实没有什么不同,但是它会产生一个非常混乱的表格。
我的问题是:如果ClearinghouseName
,TradingPartnersName
或{{中存在值,是否有办法指示实体框架仅保存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
答案 0 :(得分:1)
最简单的方法是找出一些条件,将对象限定为“非null”,即用户为其输入了一些内容,因此应该保存它。然后,从POST列表中删除“null”的任何项目。
agenttransmission.ClearingHousePartners
.Where(m => string.IsNullOrWhitespace(m.ClearingHouseName))
.Remove();
如果发布的名称值为空,那么将从列表中删除任何项目。如果您想要其他资格来确定不应保存该对象,只需将它们添加为Where
中的附加条款。