实体框架1对1的关系?

时间:2016-09-15 08:02:08

标签: c# entity-framework

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

我们举一个例子。我有一个实体文件和一个实体 FileData 。文件应始终具有FileData,FileData应始终具有File引用。我不希望这些在同一个实体(表格)中,因为FileData可以变得非常大,我大多只需要来自实体File的东西。

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

我也希望能够在一个事务中插入它们,所以我可以写

new File { FileData = ...

那么您更喜欢使用Entity Framework作为解决方案?目前我只在文件中添加了一个关系。这样我可以通过一次保存向DB提交两个实体,但是我没有在级联上删除,因为主要记录是FileData,并且它级联对我的用例“错误的方式”。

1 个答案:

答案 0 :(得分: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

希望这会对你有所帮助