2

我通过 SQL Server 创建了一个基本数据库,其表由以下代码生成:

CREATE TABLE [dbo].[Characters]
(
    [ID] INT NOT NULL PRIMARY KEY,
    [Name] varchar(MAX) NOT NULL,
    [RefName] varchar(8) NOT NULL
)

CREATE TABLE [dbo].[Players]
(
    [ID] INT NOT NULL PRIMARY KEY,
    [Name] VARCHAR(MAX) NOT NULL,
    [SkypeHandle] VARCHAR(MAX) NOT NULL
)


CREATE TABLE [dbo].[CharacterOwnership]
(
    [CharacterID] int NOT NULL,
    [PlayerID] int NOT NULL, 
    CONSTRAINT [FK_CharacterOwnership_ToCharacters] FOREIGN KEY ([CharacterID]) REFERENCES [Characters]([ID]),
    CONSTRAINT [FK_CharacterOwnership_ToPlayers] FOREIGN KEY ([PlayerID]) REFERENCES [Players]([ID]),
)

从 Visual Studio 2012 的服务器资源管理器中拖动表,我生成了下图:

自动生成的 ERD

据我所知,我正确设置了主键和外键。

var db = new DBClassesDataContext();

LINQ 能够毫无问题地访问每个表以及该表的任何字段。但是它不能调出关联的表。

在过去的几天里,我已经使用 LINQ to SQL(使用另一个数据库)设置了另一个项目,并且之前没有遇到过这个问题。由于 PK 和 FK 的配置不正确,所以在其他所有遇到此问题的人周围搜索了一下,但我发现它们对我来说似乎是正确的。(如果不是,请随时指出我的方法的错误!)

我也遵循建议关闭 Visual Studio 并重新打开,但无济于事。

4

1 回答 1

5

所以我想通了。对于那些可能通过谷歌遇到这个的人:

每个表,甚至关联表,都必须有主键。没有例外。

我不确定为什么 - 从逻辑上讲 - 这需要是这种情况,但我想这是 LINQ to SQL 的一些背景性质。

于 2013-03-22T01:12:34.433 回答