2016-08-04 77 views
1

我有两个实体称为用户和学生,如下图所示:如何创建PK/FK关系字符串和uniqueidentifier?

public class User 
{ 
    [Key] 
    public string Id { get; set; } 

    //omitted for brevity 
} 


public class Student 
{ 
    [Key] 
    public int Id { get; set; } 

    //Foreign key for User 
    public Guid UserId { get; set; } 

    //omitted for brevity 
} 

在一个MVC项目,我使用EF代码第一次和要创建这些实体之间的关系。我应该在用户实体中使用哪种数据类型作为UserId字段?字符串或Guid(在用户表的Id字段中有Guid值)?你能举个例子吗?

+0

**在用户表的Id字段中有Guid值**您已经有一个表?你为什么问这是什么类型呢?你的财产的类型应该匹配(在PK&FK表 – Shyju

+0

@Shyju我的意思是ASP.NET身份用户表:)所以,我需要与它建立关系,但不知道我应该在我的自定义表中使用什么数据类型? –

+0

@Shyju有没有回复? –

回答

0

你应该真的使用int为ID字段的索引目的。使用Guid或字符串会比int慢得多。

但对于你的问题,的UserId的类型必须是相同的类型User.Id

+0

是的,我知道,但我需要创建与ASP.NET身份表的关系,它使用字符串(GUID)数据类型作为Id字段。另一方面,将它们更改为Int确实是一个大问题,并且不能正确执行。那么,请举例吗? –

+0

@binary您可以将Identity表的id列更改为使用int而不是字符串。但是,一旦你处于生产阶段,这并不容易。所以在你的情况下,你是坚持与字符串,因为数据库中的数据类型是varchar而不是Guid – Steve

+0

我在很多页面上尝试了许多不同的方法,但没有一个能正常工作。所以,唯一的选择是在我的自定义表和AP.NET用户表中创建一个合适的关系。但是如果我使用字符串,是否可以为Student表中的新记录创建Guid值? –

0

您可以在用户实体去GUID。

public class User 
{ 
    [Key] 
    public Guid Id { get; set; } 
} 

public class Student 
{ 
    [Key] 
    public int Id { get; set; } 

    //Foreign key for User 
    public Guid UserId { get; set; } 

    public virtual User User { get; set; } 

} 
+0

用户是ASP.NET身份的默认表,我不想修改用户实体。那么,在这种情况下,我应该在Student中使用Guid还是字符串作为UserId字段?如果我应该如何为Student中的新记录创建GUID值?你能修改你的答案吗? –

+0

有任何答复吗? –