我有一個模型,如下所示(使用Model-First方法創建)。添加對實體引用的引用異常
一本書是一個銷售項目。 DigitalDisc是一個銷售項目。這工作正常,數據正在數據庫中正確插入。
我正在添加一個名爲「Purchase」的新實體。一次購買包含多個銷售項目。一旦我添加了這個新的關聯並更新了數據庫模式,我得到以下例外。
An error occurred while updating the entries.
"The INSERT statement conflicted with the FOREIGN KEY constraint \"FK_PurchaseSellingItem\". The conflict occurred in database \"LibraryReservationSystem\", table \"dbo.Purchases\", column 'PurchaseId'.\r\nThe statement has been terminated."}
如何克服這一點?
注:我需要創建一本書(如將書籍數據輸入到數據庫中)。本書的購買可能會或可能不會發生。在創建圖書時,該書的外鍵列應該爲空。但是,當該列被更新時,它應該是一個存在於購買表中的ID這可能嗎?
注:當我試圖在模型中場 「PurchasePurchaseId」 空的,我收到以下錯誤:
Error 1 Error 113: Multiplicity is not valid in Role 'Purchase' in relationship 'PurchaseSellingItem'. Because all the properties in the Dependent Role are nullable, multiplicity of the Principal Role must be '0..1'. C:\Documents and Settings\U16990\My Documents\Visual Studio 2010\Projects\LijosEF\LijosEF\MyModelFirstTest.edmx 35 3 LijosEF
CODE
class Program
{
static string connectionStringVal;
static void Main(string[] args)
{
SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
sqlBuilder.DataSource = ".";
sqlBuilder.InitialCatalog = "LibraryReservationSystem";
sqlBuilder.IntegratedSecurity = true;
// Initialize the EntityConnectionStringBuilder.
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
entityBuilder.Provider = "System.Data.SqlClient";
entityBuilder.ProviderConnectionString = sqlBuilder.ToString();
entityBuilder.Metadata = @"res://*/MyModelFirstTest.csdl|res://*/MyModelFirstTest.ssdl|res://*/MyModelFirstTest.msl";
connectionStringVal = entityBuilder.ToString();
AddBook();
AddDisc();
}
private static void AddBook()
{
//string connectionstring = "Data Source=.;Initial Catalog=SalesDB;Integrated Security=True;Connect Timeout=30";
using (var db = new MyModelFirstTestContainer(connectionStringVal))
{
Book book = new Book();
book.AvailabilityStatus = "Available";
book.Price = 150;
book.Title = "Maths Easy";
db.SellingItems.AddObject(book);
db.SaveChanges();
}
}
private static void AddDisc()
{
//string connectionstring = "Data Source=.;Initial Catalog=SalesDB;Integrated Security=True;Connect Timeout=30";
using (var db = new MyModelFirstTestContainer(connectionStringVal))
{
DigitalDisc disc = new DigitalDisc();
disc.AvailabilityStatus = "Available";
disc.Price = 300;
disc.Artist = "Turtle Violin";
db.SellingItems.AddObject(disc);
db.SaveChanges();
}
}
}
參考:
該情景如下...在我的想象情景中,每個標題只有一個副本。我需要創建一本書(比如將書籍數據輸入數據庫)。本書的購買可能會或可能不會發生。在創建圖書時,該書的外鍵列應該爲空。但是,當該列被更新時,它應該是一個存在於購買表中的ID這可能嗎? – Lijo 2012-07-27 11:46:38
是的,但您必須使用0..1的多樣性。 – 2012-07-27 11:51:39