如何在 ASP.NET 样板中制作复合唯一键?
How to make composite unique key in ASP.NET Boilerplate?
我有一个以 Id 作为主键的 table,我想在 Code
和 Value
列上有一个复合唯一键。我正在这样尝试。
[Table("Test")]
public class Test: FullAuditedEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public virtual int Code { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public virtual int Value { get; set; }
但它使复合主键不是唯一键。
试试这个:
public class SomeClass : Entity<int>
{
[Column("Code")]
public override int Id {get; set;}
public virtual string Name { get; set; }
}
[DatabaseGenerated(DatabaseGeneratedOption.None)]
将使数据库不创建代码列。实际上你需要的是覆盖Id并将其重命名为Code。
要获得复合键,只需添加
[Key]
public virtual int Value { get; set; }
字段。
为其他人添加解决方案。
不要修改任何内容,只需添加以下行
modelBuilder.Entity<Test>(b =>
{
b.HasIndex(e => new { e.Code, e.Value}).IsUnique();
});
我有一个以 Id 作为主键的 table,我想在 Code
和 Value
列上有一个复合唯一键。我正在这样尝试。
[Table("Test")]
public class Test: FullAuditedEntity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public virtual int Code { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public virtual int Value { get; set; }
但它使复合主键不是唯一键。
试试这个:
public class SomeClass : Entity<int>
{
[Column("Code")]
public override int Id {get; set;}
public virtual string Name { get; set; }
}
[DatabaseGenerated(DatabaseGeneratedOption.None)]
将使数据库不创建代码列。实际上你需要的是覆盖Id并将其重命名为Code。
要获得复合键,只需添加
[Key]
public virtual int Value { get; set; }
字段。
为其他人添加解决方案。
不要修改任何内容,只需添加以下行
modelBuilder.Entity<Test>(b =>
{
b.HasIndex(e => new { e.Code, e.Value}).IsUnique();
});