在EF Code First中,我们可以通过这样的编码来创建一对一的关系:
public class User
{
public int UserID {get;set;}
public string Name {get;set;}
public int UserDetailID {get;set;}
public UserDetail Detail {get;set;}
}
public class UserDetail
{
public int UserDetailID {get;set;}
public string Address {get;set:}
public int UserID {get;set;}
public User User {get;set;}
}
但是,当我尝试在 Visual Studio 2012 中首先使用 EF 数据库创建相同的关系时,我遇到了麻烦。这是我的代码:
CREATE TABLE [dbo].[Users] (
[UserID] UNIQUEIDENTIFIER CONSTRAINT [DF_Users_UserID] DEFAULT (newid()) NOT NULL,
[UserDetailID] UNIQUEIDENTIFIER NOT NULL,
[Name] NVARCHAR (50) NOT NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ([UserID] ASC),
CONSTRAINT [FK_Users_UserDetails] FOREIGN KEY ([UserDetailID]) REFERENCES [UserDetails]([UserDetailID])
);
CREATE TABLE [dbo].UserDetails] (
[UserDetailID] UNIQUEIDENTIFIER CONSTRAINT [DF_UserDetails_UserDetailID] DEFAULT (newid()) NOT NULL,
[UserID] UNIQUEIDENTIFIER NOT NULL,
[Address] NVARCHAR(100) NOT NULL,
CONSTRAINT [PK_UserDetails] PRIMARY KEY CLUSTERED ([UserDetailID] ASC),
CONSTRAINT [FK_UserDetails_Users] FOREIGN KEY ([UserID]) REFERENCES [dbo].[Users] ([UserID])
错误消息类似于
"Error 2 SQL01767: Foreign key 'FK_Users_UserDetails' references invalid table 'UserDetails'.
我认为这个错误的原因可能是当它试图引用外键“UserDetailID”时,它发现它还没有被创建。但是我不知道如何解决这个问题,我什至不知道这是解决问题的方法,我知道与 EF 建立一对一的关系很棘手,或者有些人甚至说这是不可能的。谁能给我任何建议?谢谢你。
更新:为了澄清我的情况,我正在尝试在 Visual Studio 2012 数据库项目中设计数据库,然后将其发布到 SQL 服务器,然后从 SQL 服务器中的数据库创建/更新我的 .edmx 文件。我不确定如何创建 EF 可以正确识别的一对一关系并在 .edmx 文件中创建正确的类。