如果不存在则添加否则插入

时间:2013-09-19 11:29:10

标签: c# database entity-framework

我正在一个项目中工作,我需要使用Entity Framework将数据保存到不同的表。 我实际上正在保存地址。

我的表是:

地址(Id,地址line1,StateId,SuburbId,PostcodeId)
州(Id,StateName)
郊区(Id,SuburbName)
邮政编码(Id,PO)

如何插入新地址,如果表格中存在邮政编码和/或郊区,则使用现有地址作为新地址,否则将新郊区/邮政编码插入相关表格。 例如,正在插入一个新地址,但郊区已存在于郊区表中,因此我需要对现有地址进行约束,而不是在郊区表中创建(复制)郊区。

有意义吗?我没有尝试任何东西,因为我不知道该尝试什么。

这是我到目前为止所做的:

Entities db = new Entities();

var addrSuburb = new Suburb()
{
    SuburbName = "My Suburb"
};

var addrState = new State()
{
    State1 = "My State",
    StateShort = "MS"
};
var addrPostCode = new Postcode()
{
    PO = 4234
}
var addrCust = new Address()
{
    AddressLine1 = My address,
    Suburb1 = addrSuburb,
    Postcode1 = addrPostCode,
    State = addrState
};

db.Postcodes.Add(addrPostCode);
db.Suburbs.Add(addrSuburb);
db.States.Add(addrState);                        
db.Addresses.Add(addrCust);
db.SaveChanges();

如果我能有一个小例子,那就太好了!

1 个答案:

答案 0 :(得分:1)

如果您可以决定天气,则应根据SuburbName中的插入或更新 郊区表你可以这样做。

if(!db.Suburbs.where(x=>x.SuburbName.Equel(addrSuburb.SuburbName)).ToList().Count > 0)
{
// Insert Flow
db.Postcodes.Add(addrPostCode);
db.Suburbs.Add(addrSuburb);
db.States.Add(addrState);                        
db.Addresses.Add(addrCust);

}
else
{
  // Update Flow

db.Postcodes.Attach(addrPostCode);
db.Suburbs.Attach(addrSuburb);
db.States.Attach(addrState);
db.Addresses.Attach(addrCust);

db.Entry(addrPostCode).State = EntityState.Modified;
db.Entry(addrSuburb).State = EntityState.Modified;
db.Entry(addrState).State = EntityState.Modified;
db.Entry(addrCust).State = EntityState.Modified;

}

db.SaveChanges();