1 回答
TA贡献1827条经验 获得超9个赞
两个从站具有相同的 MasterID(“Master 01”)和相同的鉴别器(空),因此它们具有相同的主键,这导致了问题。
更新
一种可能的解决方案是为每种类型添加一个鉴别器:
public class SlaveA : Slave
{
public string Discriminator => "S1";
[Column("SlaveAValue")]
[Required]
public string SlaveAValue { get; set; }
}
public class SlaveB : Slave
{
public string Discriminator => "S2";
[Column("SlaveBValue")]
[Required]
public string SlaveBValue { get; set; }
}
替代方案
对以上内容表示歉意。我认为更好的选择是在 Slaves 表上有一个新的人工主键。
CREATE TABLE Slaves (
SlavesId INT NOT NULL IDENTITY PRIMARY KEY,
MasterId VARCHAR2 NOT NULL,
Discriminator VARCHAR2 NOT NULL,
SlaveAValue VARCHAR2,
SlaveBValue VARCHAR2,
FOREIGN KEY (MasterId) REFERENCES Master(Id) ON DELETE CASCADE
);
[Table("Slaves")]
public abstract class Slave
{
[Column("SlaveId")]
[Key]
public int SlaveId {get;set;}
[Column("MasterId")]
[Required]
public string MasterId { get; set; }
[ForeignKey("MasterId")]
public Master Master { get; set; }
}
然后在您的数据库中添加一个唯一索引,以确保每个 master 类型不会超过一种:
CREATE UNIQUE INDEX master_index ON Slaves(MasterId, Discriminator);
- 1 回答
- 0 关注
- 153 浏览
添加回答
举报