在Firebird 2.5 EF Core上定义“一对一”的关系

问题描述

我正在使用EF Core和第三方 Firebird 2.5 数据库,由于某种原因,他们决定创建一个单一的而不是简单的一对一关系具有两列的表格本身就是这种关系,即

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_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 which is not supported by current database provider读到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'.

关于我做错什么的任何提示吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)