我使用MVC3和EF4代碼優先。我有以下型號:MVC3 EF4在保存時複製外鍵對象
public class Order {
public int ID { get; set; }
[Required]
public float Price { get; set; }
[Required]
public int PayMethodId { get; set; }
public PayMethod PayMethod { get; set; }
public int? SpecificEventId { get; set; }
public SpecificEvent SpecificEvent { get; set; }
public int? SeasonalTicketId { get; set; }
public SeasonalTicket SeasonalTicket { get; set; }
}
當我嘗試保存Order對象與specificEventId = 2
和specificEvent = X
,新SpecificEvent
對象在數據庫中創建的,即使是已經在一個數據庫中的特定事件X與ID 2 。當我嘗試使用specificEventId = 2
和specificEvent = null
時,我收到數據驗證錯誤。
我在做什麼錯?我希望SpecificEvent
和SeasonalTicket
爲空,並且我不希望EF4在保存「訂單」時在數據庫中創建這些對象的新實例。
更新
這是我在DB節省Order
代碼:
public void SaveOrder(Order order)
{
Order fromDb = null;
// If editing an existing object.
if ((fromDb = GetOrder(order.ID)) != null)
{
db = new TicketsDbContext();
db.Entry(order).State = System.Data.EntityState.Modified;
db.SaveChanges();
}
// If adding a new object.
else
{
db.orders.Add(order);
db.SaveChanges();
}
}
當我保存,我也達到else
條款。
這是關於EF的最常見問題,所以我想知道你在問這個問題之前搜索了什麼? –
@Ladislav:我搜索了「ef \ mvc可選外鍵」,「ef \ mvc對象在保存時重複」等等......我發現了一些與我的案例接近的例子,但它仍然不適用於我。也許我錯過了一些東西(儘管我確實檢查了一下自己),或者我找到了錯誤的東西。我試圖調試這個bug幾個小時了(我是一種EF noob :)。如果你認爲我錯過了一些顯而易見的東西,或者對我可以尋找的其他東西有任何建議,我會非常樂意聽到:) – Ofirov
您應該添加您的代碼以將實體保存到您的問題中。 –