我有一个如下所示的模型(使用模型优先方法创建)。
一本书是一种销售物品。DigitalDisc 是一种销售商品。这工作正常,数据被正确插入到数据库中。
我正在添加一个名为“Purchase”的新实体。一次购买包含多个销售项目。一旦我添加了这个新关联并更新了数据库模式,我就会得到以下异常。
更新条目时出错。
"INSERT 语句与 FOREIGN KEY 约束 \"FK_PurchaseSellingItem\" 冲突。冲突发生在数据库 \"LibraryReservationSystem\"、表 \"dbo.Purchases\"、列 'PurchaseId' 中。\r\n语句已终止。 "}
如何克服这一点?
注意:我需要创建一本书(比如将书籍数据输入数据库)。这本书可能会或可能不会发生购买。创建书时,该书的外键列应为空。但是当该列更新时,它应该是 Purchase 表中存在的 ID 这可能吗?
注意:当我尝试在模型中使字段“PurchasePurchaseId”为空时,我收到以下错误:
错误 1 错误 113:多重性在关系“PurchaseSellingItem”中的角色“Purchase”中无效。因为从属角色中的所有属性都可以为空,所以主体角色的多重性必须为“0..1”。C:\Documents and Settings\U16990\My Documents\Visual Studio 2010\Projects\LijosEF\LijosEF\MyModelFirstTest.edmx 35 3 LijosEF
代码
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();
}
}
}
参考: