Entity framework core 在Firebird 2.5 EF Core上定义“一对一”关系

Entity framework core 在Firebird 2.5 EF Core上定义“一对一”关系,entity-framework-core,ef-code-first,firebird,firebird-.net-provider,Entity Framework Core,Ef Code First,Firebird,Firebird .net Provider,我正在使用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 (in

我正在使用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)
因此,每个股票都有一个股票标识符,而这个标识符又有一个股票产品。通常,当我在MySQL中创建自己的DB时,我只是用数据注释设置外键,我对fluent API不太熟悉,这是双关语,让迁移完成它的工作。但是,在这种情况下,由于DB是第三方的,所以我不能更改它的模式,所以我需要使用现有的结构

现在我有以下几点:

公开股 { [关键] 公共int ID_STOCK{get;set;} [最大长度50] 公共字符串说明{get;set;} [ColumnTypeName=小数点18,4] 公共十进制售价{get;set;} 公共股票标识符股票标识符{get;set;} } 公共类股票标识符 { [外国投资者股票] 公共股票ID_股票{get;set;} 公共库存产品ID产品{get;set;} } 公共类库存产品 { [ForeignKeyID_产品] 公开股票_标识符ID _标识符{get;set;} [最大长度18] 公共字符串GTIN{get;set;} [最大长度18] 公共字符串SKU{get;set;} [ColumnTypeName=小数点18,4] 公共十进制指令{get;set;} } 我在fluentapi上读到,它可以解决这个问题,但是,这篇文章在一对一的情况下工作得完美无缺。一旦我尝试在像这样的级联关系上实现Fluent,我就会

modelBuilder.Entity .HasOnep=>p.ID\u标识符 .一人; modelBuilder.Entity .HasOnep=>p.identificator .一人;
有什么关于我做错了什么的提示吗?

你确定股票标识符是一对一的,而且总是这样吗?我觉得这是一个向前的扩展点,有一天他们可以释放这个垫片,将其转换为一对多,而无需重新制作其他表。同时,一个难看的破解方法是通过从STOCK\u IDENTIFIER si中选择si.ID\u IDENTIFIER(其中si.ID\u STOCK=ID\u STOCK)来改变STOCK add ID\u PRODUCT\u ID,或者从STOCK中选择si.ID\u IDENTIFIER,然后在i.ID\u STOCK=s.ID\u STOCK中尝试使用应用程序中的那些。诚然,通过这种简化,你……你硬编码了一对一的要求,如果它被取消,你的应用程序将开始失败。第一种方法比较慢,但会引入一对多的方法——它应该明确失败。第二种方法速度更快,但在一对多的情况下,它会产生集积乘以库存行,而不是崩溃和烧坏。我们不需要一个永久性的atm解决方案,所以我认为现在任何黑客都已经足够好了。这就是使用第三方数据库的问题,也是我们开发自己的ERP套件的主要原因。我会试试你的建议,然后再给你回复。谢谢
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'.