【发布时间】:2013-06-22 20:48:57
【问题描述】:
在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 Database first 创建相同的关系时,我遇到了麻烦。这是我的代码:
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 文件中创建正确的类。
【问题讨论】:
-
你的意思是使用EF Model First,因为当你已经有一个数据库时使用Database First?
-
您需要在尝试插入外键之前制作两个表。
-
@Sniffer 请查看我的更新。谢谢。
-
你不应该使用数据库优先,你应该使用模型优先,它是专门为这些情况而设计的。
标签: entity-framework ef-code-first one-to-one ef-database-first