我正在使用 EF Core 和第三方Firebird 2.5数据库,出于某种原因,他们决定创建一个包含两列的单表,而不是简单的一对一关系,而这些列本身就具有这种关系, IE
STOCK
========
ID_STOCK(int)
more columns (and their datatypes)
STOCK_IDENTIFIER
========
ID_STOCK (int)
ID_IDENTIFIER (int)
STOCK_PRODUCT
========
ID_IDENTIFIER (int)
more columns (and their datatypes)
因此,每个 STOCK 都有一个 STOCK_IDENTIFIER,而后者又具有一个 STOCK_PRODUCT。通常,当我在 MySQL 中创建自己的数据库时,我只是使用数据注释设置外键(我不熟悉 Fluent API,双关语),然后让迁移完成它的工作。但是,在这种情况下,我无法更改数据库的架构(因为它是第三方),所以我需要使用现有的结构。
现在我有以下内容:
public class STOCK
{
[Key]
public int ID_STOCK { get; set; }
[MaxLength(50)]
public string DESCRIPTION { get; set; }
[Column(TypeName = "decimal(18, 4)")]
public decimal SELL_PRICE { get; set; }
public STOCK_IDENTIFIER STOCK_IDENTIFIER{ get; set; }
}
public class STOCK_IDENTIFIER
{
[ForeignKey("ID_STOCK")]
public STOCK ID_STOCK { get; set; }
public STOCK_PRODUCT ID_PRODUCT { get; set; }
}
public class STOCK_PRODUCT
{
[ForeignKey("ID_PRODUCT")]
public STOCK_IDENTIFIER ID_IDENTIFIER{ get; set; }
[MaxLength(18)]
public string GTIN{ get; set; }
[MaxLength(18)]
public string SKU{ get; set; }
[Column(TypeName = "decimal(18, 4)")]
public decimal INSTOCK_AMNT { get; set; }
}
我在The property X is of type Y 上读到,当前数据库提供商不支持Fluent API 可以解决这个问题,但是,该文章可以完美地一对一地工作。一旦我尝试在像这样的级联关系上实现 Fluent,我就会得到
modelBuilder.Entity<STOCK_IDENTIFIER>()
.HasOne<STOCK_PRODUCT>(p => p.ID_IDENTIFIER)
.WithOne();
modelBuilder.Entity<STOCK>()
.HasOne<STOCK_IDENTIFIER>(p => p.IDENTIFICADOR)
.WithOne();
The property or navigation 'ID_IDENTIFIER' cannot be added to the entity
type 'STOCK_PRODUCT' because a property or navigation with the
same name already exists on entity type 'STOCK_PRODUCT'.
关于我做错了什么的任何提示?