有关背景信息,请参阅以下帖子:
我一直认为这ForeignKey
用于显示类中哪个属性持有确定导航属性的ForeignKey,例如
public class MemberDataSet
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int? DeferredDataId { get; set; }
[ForeignKey("DeferredDataId")]
public virtual DeferredData DeferredData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是,我在链接的帖子上发现这是不对的,因为DeferredData的主键被称为Id我实际需要:
public class MemberDataSet
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int? DeferredDataId { get; set; }
[ForeignKey("Id")]
public virtual DeferredData DeferredData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
即ForeignKey
用于指向其他类.
然后我继续改变其他一些参考文献:
public class MemberDataSet
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { …
Run Code Online (Sandbox Code Playgroud) c# entity-framework foreign-keys code-first shared-primary-key
我猜这是一个半常见的问题,但我在过去的问题列表中找不到它.我有一组需要共享主键索引的产品表.假设如下:
product1_table:
id,
name,
category,
...other fields
product2_table:
id,
name,
category,
...other fields
product_to_category_table:
product_id,
category_id
Run Code Online (Sandbox Code Playgroud)
显然,在两个产品表之间建立共享索引会很有用.注意,保持它们分开的想法是因为它们除了基础之外还有很多不同的字段集,但是它们共享一个共同的分类.
更新:
很多人都建议使用表继承(或gen-spec).这是我所知道的一个选项,但在其他数据库系统中我可以在表之间共享一个序列,我希望MySQL有类似的解决方案.我认为它不是基于回答.我想我必须继续使用表继承...谢谢大家.
问题
我正在尝试按照我之前的问题使用表拆分来共享大约 7 个实体的大表(200+字段)。
EF6 不仅需要从主模型到子模型的导航属性,还需要所有子模型之间的导航属性(这很糟糕)。
手动解决
这可以手动完成:
public class Franchise
{
[Key]
public int Id { get; set; }
public virtual FranchiseEntity Entity { get; set; }
public virtual FranchiseMiscellaneous Miscellaneous { get; set; }
}
[Table("Franchise")]
public class FranchiseEntity
{
[Key]
public int Id { get; set; }
public virtual FranchiseEntity Entity { get; set; } // Ignored, but relevant when inheritance involved, below...
public virtual FranchiseMiscellaneous Miscellaneous { get; set; }
}
[Table("Franchise")]
public class …
Run Code Online (Sandbox Code Playgroud) inheritance domain-driven-design entity-framework shared-primary-key table-splitting
如您所见,表使用相同的主键相互引用.这就是问题 - 我知道用两次INSERT
调用放置数据会给我一个错误,说我违反了PK约束.有没有办法在代码中执行此操作?我想创建一个存储过程,用于添加"主要产品"(SUROWCE)并对应于它记录在"stock"(STAN)中.
我的代码尝试:
INSERT INTO STAN VALUES(25, 5, 1000);
INSERT INTO SUROWCE VALUES(25, 'wood');
Msg 547, Level 16, State 0, Line 4
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_STAN_SUROWCE". The conflict occurred in database "TestBazyDanych", table "dbo.SUROWCE", column 'ID_SUROWCA'.
c# ×1
code-first ×1
foreign-keys ×1
inheritance ×1
mysql ×1
sql-insert ×1
sql-server ×1
t-sql ×1
tags ×1