C# MVC5引用Guid

C# MVC5引用Guid,c#,asp.net,entity-framework,asp.net-mvc-5,C#,Asp.net,Entity Framework,Asp.net Mvc 5,我正在创建如下表: public class Team { [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid Id { get; set; } public string CaptainId { get; set; } public string CoCaptainId { get; set; } public string ContactDetails { get

我正在创建如下表:

public class Team
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    public string CaptainId { get; set; }
    public string CoCaptainId { get; set; }
    public string ContactDetails { get; set; }
}
public class TeamMember
{
    public string Id { get; set; }
    public string Description { get; set; }
    public string GameDisplayName { get; set; }
    public DateTime Joined { get; set; }
    public string TeamId { get; set; }
}
然后我有一张这样的桌子:

public class Team
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    public string CaptainId { get; set; }
    public string CoCaptainId { get; set; }
    public string ContactDetails { get; set; }
}
public class TeamMember
{
    public string Id { get; set; }
    public string Description { get; set; }
    public string GameDisplayName { get; set; }
    public DateTime Joined { get; set; }
    public string TeamId { get; set; }
}
关于EF 6和MVC5,我有两个问题不明白

1) 如何在团队表中引用我的Id字段。我是将TeamMember中的TeamId设置为字符串还是Guid?我知道我需要设置属性
[ForeignKey(“Team”)]
,但是我仍然不知道如何在代码中正确引用它,因为每当我需要进行任何类型的比较时,我总是必须在Guid上键入
.ToString()
,以便能够将值与另一个字符串值进行比较

2) 我的团队成员也有一个Id,该Id引用Identity framework中的用户。我应该如何引用那个Id,这个Id应该是引用用户表中Id的外键,但我也不知道如何正确引用那个Id,它是字符串还是Guid或其他什么

编辑:

CaptainId=user.Id给出一个错误:


无法将源类型“string”转换为目标类型“System.Guid”
您应该使用相同的类型,即
Guid

public Guid TeamId { get; set; }
此外,您需要在
TeamMember
模型中保留
Team
类型的
virtualteam
属性。通常,
int
long
Guid
也是用于表主键的类型<代码>字符串可能不是一个好主意,因为您需要执行自定义代码来生成表中不存在的字符串

这将生成具有适当外键关系的2个表

public class Team
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    public string CaptainId { get; set; }
    public string CoCaptainId { get; set; }
    public string ContactDetails { get; set; }
}
public class TeamMember
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    public string Description { get; set; }
    public string GameDisplayName { get; set; }
    public DateTime Joined { get; set; }
    public Guid TeamId { get; set; }
    public virtual Team Team { set; get; }
}

现在无需进行
ToString()
转换以进行比较。您可以执行
YourGuid1==YourGuid2
expression

您应该使用相同的类型,即
Guid

public Guid TeamId { get; set; }
此外,您需要在
TeamMember
模型中保留
Team
类型的
virtualteam
属性。通常,
int
long
Guid
也是用于表主键的类型<代码>字符串可能不是一个好主意,因为您需要执行自定义代码来生成表中不存在的字符串

这将生成具有适当外键关系的2个表

public class Team
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    public string CaptainId { get; set; }
    public string CoCaptainId { get; set; }
    public string ContactDetails { get; set; }
}
public class TeamMember
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    public string Description { get; set; }
    public string GameDisplayName { get; set; }
    public DateTime Joined { get; set; }
    public Guid TeamId { get; set; }
    public virtual Team Team { set; get; }
}

现在无需进行
ToString()
转换以进行比较。你可以做
YourGuid1==YourGuid2
expression

也许应该尝试更加一致;如果要在一个表上使用Guid/uniqueidentifier作为主键,请在其他表上使用相同的列类型;如果要在一个表上使用Guid/uniqueidentifier作为主键,请在其他表上使用相同的列类型。CaptainId和CoCaptainId都是用户表的外键,我是否也要设置这些Guid?这是团队的桌子里面。我不知道返回的身份是什么。我还注意到您在团队成员中缺少一个外键引用?这不是必需的吗?是的。您应该将这些外键列更改为long/int/guid,并添加相关的虚拟属性。只要您的团队成员中有
虚拟团队
,它就会创建正确的外键(按惯例)。感谢您的帮助,Shyju!我试过你的方法,但很少有不合拍的。我已经编辑了我的问题,向大家展示了我现在对成员、团队和团队成员的看法。当我尝试将Id值从成员类分配到MemberId时,我得到一个错误,它说它无法将字符串转换为Guid。出于这个原因,我认为我应该让船长作为字符串而不是Guid。这是正确的还是我应该使用.ToString来转换?@Bagzli引用的类型必须与它们引用的属性相同。这是不可谈判的。如果要从字符串中为它们分配值,必须首先将字符串解析为适当的类型。CaptainId和CoCaptainId都是用户表的外键,我是否也要设置这些Guid?这是团队的桌子里面。我不知道返回的身份是什么。我还注意到您在团队成员中缺少一个外键引用?这不是必需的吗?是的。您应该将这些外键列更改为long/int/guid,并添加相关的虚拟属性。只要您的团队成员中有
虚拟团队
,它就会创建正确的外键(按惯例)。感谢您的帮助,Shyju!我试过你的方法,但很少有不合拍的。我已经编辑了我的问题,向大家展示了我现在对成员、团队和团队成员的看法。当我尝试将Id值从成员类分配到MemberId时,我得到一个错误,它说它无法将字符串转换为Guid。出于这个原因,我认为我应该让船长作为字符串而不是Guid。这是正确的还是我应该使用.ToString来转换?@Bagzli引用的类型必须与它们引用的属性相同。这是不可谈判的。如果要从字符串中为它们赋值,必须首先将字符串解析为适当的类型。