2016-09-15 283 views
4

我有一个场景,我最佳需要两个实体之间的1对1关系。我可以用EF做到这一点,但最终结果是一个模型,我无法插入任何数据,因为实体框架不知道首先插入哪一个数据。即使将关系更改为0..1到0..1,也会发生同样的情况。实体框架1对1关系?

举个例子吧。我有一个实体文件和一个实体FileData。文件应始终有一个FileData和FileData应始终有一个文件引用。我不希望这些与FileData相同的实体(表格)能够变得相当大,而且我大多只需要来自实体File的内容。

我想指定两个级联之间的删除,这样如果我删除一个文件,相关的FileData也会被删除。

我也想能够插入他们两个在一个事务中,所以我可以写

new File { FileData = ... 

所以你宁愿与实体框架的解决方案?目前,我只向文件添加了关系。通过这种方式,我可以一次性将两个实体提交给数据库,但由于主要记录是FileData,所以我不会在级联上删除,并且级联对我的用例起作用“错误的方式”。

+0

你可以展示你的模型代码吗? – Sampath

+0

正在从数据库中为您生成模型吗?如果是这样,那么在数据库中创建相关表格,使用适当的外键添加索引以及最后点击几个按钮即可自动生成模型会更容易。 –

+0

你可以使用这个github项目作为示例。检查File-FileData关系。这种关系的现状有一些问题,但我希望这是我在这里描述的。 https://github.com/antsim/EntityFrameworkTester –

回答

4

配置1-1船的关系,你,有这样

// Configure FirstClassID as PK for SecondClass 
    modelBuilder.Entity<SecondClass>() 
     .HasKey(m => m.FirstClassId); 

    // Configure FirstClassId as FK for SecondClass 
    modelBuilder.Entity<FirstClass>() 
       .HasRequired(m => m.SecondClass) 
       .WithRequiredPrincipal(m => m.FirstClass); 

这将导致FirstClassId配置它是在这两个班的PrimaryKey和第二类的外键,即SecondClass是一个弱实体

你可以阅读更多关于以一对一的关系here

希望这将帮助你

相关问题