1

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

我的桌子是:

地址 (Id, address 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();

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

4

1 回答 1

1

如果您可以根据 Suburb 表中的 SuburbName 做出决定,它应该是 Insert 或 Update,您可以按如下方式执行此操作。

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();
于 2013-09-19T12:26:02.200 回答