假定下列:保持實體引用乾淨而不保存到數據庫
2的entites(Address
< - (m爲1) - >City
),一個Address
(由它們的ID FK)具有一個City
class Address
{
public Guid AddressId {get;set;}
public Guid AddressCityId {get;set;}
public City CityEntity {get;set;}
public string CityName { get { return CityEntity.Name; }
public void SetCity(DbContext ctx, City c)
{
AddressCityId = c.CityId;
// here I need some kind of refresh
this.CityEntity == null; // true
ctx.ObjectContext.Refresh(RefreshMode.ClientWins, this); // fails
ctx.ObjectContext.Refresh(RefreshMode.StoreWins, this); // fails
}
}
class City
{
public Guid CityId {get;set;}
public string Name {get;set;}
}
我想逐步創建值並將其保存在數據庫中。根據我的理解,兩個實體都存在於ObjectStateManager上下文中,但彼此不知道(也不參考)。 如何在不調用SaveChanges()
的情況下實現此目的?
也嘗試附加實體。但是這會導致SaveChanges
失敗,因爲所有實體都有狀態Unmodified
。
編輯#1
目前我正在運行此(簡化)代碼(這仍然是不工作):
using(var context = new DbContext())
{
var city = new City(){Name = "New York"};
context.Set<City>.Add(city);
context.ChangeTracker.DetectChanges();
var address = new Address();
context.Set<Address>.Add(address);
context.ChangeTracker.DetectChanges();
// at this point, both entities have the state `Added`
// set FK manually and call update
address.AddressCityId = city.CityId;
context.ChangeTracker.DetectChanges();
address.CityName == null; // reference is still null
}
編輯#2
致電時context.SaveChanges()
在Add
之後它起作用,截至目前,已添加的實體已設置爲EntityKey
。 有沒有什麼方法可以手動設置EntityKey
(EF6),因爲Guid
總是由客戶端而不是數據庫生成的?
我認爲您使用代碼優先來設計模型。 EF具有用於生成表/實體之間關係的標準命名方案。如果你不遵循它,你需要使用流利的語法來在OnModelCreated()事件中聲明它們。 –
@MattiasÅslund不,它是數據庫優先(真實的)。這只是示例代碼來展示我想要做的事情。所以,命名是(不是顯示)生成和正確。 – KingKerosin