【发布时间】:2013-11-02 20:45:15
【问题描述】:
我在 Visual Studio 数据库图表编辑器中制定了一个数据库设计,并从中创建了我的所有表。我还创建了一个 Linq to SQL 类并添加了我的表来为每个表创建对象。尝试将新条目插入数据库时遇到问题。
例如:
假设我有两张表,Artists 和 Albums。一个艺术家可以有多个专辑(一对多)。专辑有一个 ArtistID 字段,它是 Artist 表中 ArtistID PK 的 FK。它们的 ID 是由数据库自动生成的 GUID。
现在,在我的代码中,我创建了一个新的专辑对象(称为 myAlbum)并将其 Artist 对象设置为数据库中已有的 Artist(myArtist)。
如果我这样做:
DatabaseDataContext context = new DatabaseDataContext();
context.Albums.InsertOnSubmit(myAlbum);
context.SubmitChanges();
我最终得到一个 SqlException 说:“违反主键约束 'PK_Artist'。无法在对象 'dbo.Artist' 中插入重复键。 声明已终止。”
如果我将 myAlbum.Artist 与数据库中已有的 Artist 进行比较,Linq 说它们是相等的,所以它知道它们是同一个对象。
如何让 Linq 插入新的专辑对象并将其链接到数据库中的现有艺术家,而不尝试再次插入艺术家?
【问题讨论】:
-
什么是pk_Artist列数据类型?
-
你能把设置艺术家的代码贴出来吗?
-
我做了一些类似的事情:专辑 myAlbum = new Album("Greatest Hits"); myAlbum.Artist = myArtist;