C# 添加对导致异常的实体的引用
我有一个如下所示的模型(使用模型优先方法创建) 书是一种畅销品。数字光盘是一种畅销品。这工作正常,数据正确插入数据库 我正在添加一个名为“购买”的新实体。一次购买包含多个sellingitems。一旦我添加了这个新的关联并更新了数据库模式,我就会得到以下异常 更新条目时出错 INSERT语句与外键约束“FK_PurchaseSellingItem”冲突。冲突发生在数据库“LibraryReservationSystem”、表“dbo.PurchaseId”列中。\r\n语句已终止。} 如何克服这个问题 注意:我需要创建一本书(比如将书的数据输入数据库)。这本书的购买可能会发生,也可能不会发生。创建图书时,该图书的外键列应为空。但当该列被更新时,它应该是采购表中的一个ID,这可能吗 注意:当我试图在模型中使字段“PurchasePurchaseId”为空时,我得到以下错误: 错误1错误113:关系“PurchaseSellingItem”中的角色“Purchase”中的多重性无效。因为依赖角色中的所有属性都可以为null,所以主体角色的多重性必须为“0..1”。C:\Documents and Settings\U16990\My Documents\Visual Studio 2010\Projects\LijosEF\LijosEF\MyModelFirstTest.edmx 35 3 LijosEF 代码 参考:C# 添加对导致异常的实体的引用,c#,.net,entity-framework,domain-driven-design,ef-model-first,C#,.net,Entity Framework,Domain Driven Design,Ef Model First,我有一个如下所示的模型(使用模型优先方法创建) 书是一种畅销品。数字光盘是一种畅销品。这工作正常,数据正确插入数据库 我正在添加一个名为“购买”的新实体。一次购买包含多个sellingitems。一旦我添加了这个新的关联并更新了数据库模式,我就会得到以下异常 更新条目时出错 INSERT语句与外键约束“FK_PurchaseSellingItem”冲突。冲突发生在数据库“LibraryReservationSystem”、表“dbo.PurchaseId”列中。\r\n语句已终止。} 如何克服这
您已将关系配置为强制关系,但您正在保存
SellingItem
,而不保存相关的Purchase
。我希望EF在将记录保存到数据库之前会抛出一些异常,但它没有,而且它很可能会尝试传递FK列的默认值,并且您没有任何具有此类Id的购买
顺便说一句,您是否应该使用多对多关系,因为销售项目可以多次销售,而购买可以有多个销售项目?场景如下。。。在我想象的场景中,每个标题只有一个副本。我需要创建一本书(比如将书的数据输入数据库)。这本书的购买可能会发生,也可能不会发生。创建图书时,该图书的外键列应为空。但当该列被更新时,它应该是采购表中的一个ID。这可能吗?是的,但必须使用0..1重数。
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();
}
}
}