我有一个看起来像这样的课程。
public class MyClass
{
public Object1 Object1 { get; set; }
public Object2 Object2 { get; set; }
public int Order { get; set; }
public DateTime Created { get; set; }
}
MyClass是一个包含两个附加列的连接表。
实体映射:
public class MyClassMap : EntityTypeConfiguration<MyClass>
{
public MyClassMap()
{
ToTable("dbo.MyClass");
HasKey(pc => new { pc.Object1.Id, pc.Object2.Id });
Property(x => x.Order).IsOptional();
Property(x => x.Created).HasColumnType("DateTime").IsRequired();
}
}
当我想为MyClass创建复合主键时,会出现问题。我想要这样的主键:
HasKey(pc => new { pc.Object1.Id, pc.Object2.Id });
问题是这是不允许的。 匿名类型不能具有多个具有相同名称的属性
我当然可以将Object1上的Id属性命名为Object1Id,将Object2上的Id属性命名为Object2Id,但我不想这样做。
我还可以在MyClass上添加另一个名为Id的属性,并将其用作主键,但也要避免使用它。
有没有其他方法可以解决这个问题?
答案 0 :(得分:4)
Mathew(https://stackoverflow.com/users/219933/mathew)给了我一些提示。
类需要看起来像这样(添加了Object1Id和Object2Id):
public class MyClass
{
public Object1 Object1 { get; set; }
public int Object1Id { get; set; }
public Object2 Object2 { get; set; }
public int ObjectId2 { get; set; }
public int Order { get; set; }
public DateTime Created { get; set; }
}
实体映射:
public class MyClassMap : EntityTypeConfiguration<MyClass>
{
public MyClassMap ()
{
this.ToTable("dbo.MyClass");
HasKey(pc => new { pc.Object1Id, pc.Object2Id});
HasRequired(x => x.Object1).WithMany().HasForeignKey(x => x.Object1Id);
HasRequired(x => x.Object2).WithMany().HasForeignKey(x => x.Object2Id);
}
}
这并没有解决我的名为Id的重复键名列的问题,但我希望Entity Framework将来会支持这样的主键:
HasKey(pc => new { pc.Object1.Id, pc.Object2.Id});
答案 1 :(得分:-1)
那么为什么不给匿名类型属性命名呢?
HasKey(pc => new { Id1 = pc.Object1.Id, Id2 = pc.Object2.Id });