EF代码第一个到(一或零)以字符串为主键
EF Code First One to (One or Zero) with string as primary key
当我尝试 link 为数据结构添加这两个 class 时,我总是出错。一个以字符串作为主键,另一个以长字符串为主键。我试过数据注释和其他各种东西。
流利 API 或数据注释是可以接受的。
这是其中的示例 class:
public class X
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public long Id { get; set; }
public string Token { get; set; }
public virtual Y Y { get; set; }
}
这是另一个 class:
public class Y
{
[Key, StringLength(64), DatabaseGenerated(DatabaseGeneratedOption.None)]
public string Token { get; set; }
public long XId { get; set; }
public virtual X X{ get; set; }
}
这里是我尝试在 OnModelCreating() 中定义 fkeys 的地方:
modelBuilder.Entity<X>()
.HasOptional(u => u.Y)
.WithRequired(u => u.X)
.Map(m => m.MapKey("Token"));
modelBuilder.Entity<Y>()
.HasRequired(u => u.X)
.WithOptional(u => u.Y)
.Map(m => m.MapKey("XId"));
public class X
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public long Id { get; set; }
// you don't need Token here...
//public string Token { get; set; }
[InverseProperty("X")]
public virtual Y Y { get; set; }
}
public class Y
{
[Key, Column(Order=1)]
public long XId {get;set;}
[Index(Unique = true), StringLength(64)]
public string Token { get; set; }
[ForeignKey("XId")]
[InverseProperty("Y")]
public virtual X X{ get; set; }
}
当我尝试 link 为数据结构添加这两个 class 时,我总是出错。一个以字符串作为主键,另一个以长字符串为主键。我试过数据注释和其他各种东西。
流利 API 或数据注释是可以接受的。
这是其中的示例 class:
public class X
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public long Id { get; set; }
public string Token { get; set; }
public virtual Y Y { get; set; }
}
这是另一个 class:
public class Y
{
[Key, StringLength(64), DatabaseGenerated(DatabaseGeneratedOption.None)]
public string Token { get; set; }
public long XId { get; set; }
public virtual X X{ get; set; }
}
这里是我尝试在 OnModelCreating() 中定义 fkeys 的地方:
modelBuilder.Entity<X>()
.HasOptional(u => u.Y)
.WithRequired(u => u.X)
.Map(m => m.MapKey("Token"));
modelBuilder.Entity<Y>()
.HasRequired(u => u.X)
.WithOptional(u => u.Y)
.Map(m => m.MapKey("XId"));
public class X
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public long Id { get; set; }
// you don't need Token here...
//public string Token { get; set; }
[InverseProperty("X")]
public virtual Y Y { get; set; }
}
public class Y
{
[Key, Column(Order=1)]
public long XId {get;set;}
[Index(Unique = true), StringLength(64)]
public string Token { get; set; }
[ForeignKey("XId")]
[InverseProperty("Y")]
public virtual X X{ get; set; }
}