在Entity Framework Core中表示复杂对象

时间:2017-03-03 20:22:27

标签: c# entity-framework

例如,假设我想将这个对象放入带有EntityFramework的SQL数据库中:

public class Shift
{
    public Guid Id { get; set; }

    public Attendance Attendance { get; set; }
    public Managers Managers { get; set; }

    // other properties
}

public class Attendance
{
    public int AM { get; set; }
    public int MidDay { get; set; }
    public int PM { get; set; }
}

public class Managers
{
    public string AM { get; set; }
    public string MidDay { get; set; }
    public string PM { get; set; }
}

通常情况下,我认为无法做到这一点,我只想将所有内容压缩成一个简单的属性集合:

public class Shift
{
    public Guid Id { get; set; }

    public int Attendance_AM { get; set; }
    public int Attendance_MidDay { get; set; }
    public int Attendance_PM { get; set; }

    public string Managers_AM { get; set; }
    public string Managers_MidDay { get; set; }
    public string Managers_PM { get; set; }
}

但有没有办法让EF将复杂对象存储为单个表?

修改

这可能有助于说明我的问题。

目标是在上面使用两个代码块,在SQL中使用相同的表: The goal table

2 个答案:

答案 0 :(得分:3)

在上下文类的OnModelCreating()中添加以下内容。它仅适用于.NET Core 2.0:

 modelBuilder.Entity<Shift>().OwnsOne(s => 
             { cb.OwnsOne(c => c.Attendance);
               cb.OwnsOne(c => c.Managers);
             });

答案 1 :(得分:1)

此功能将在Entity Framework Core 2中提供。 目前,实体框架核心2处于预览状态,但预览1中的功能尚未完成,但可以通过使用其每晚构建来使用。

您可以在此处阅读:https://blogs.msdn.microsoft.com/dotnet/2017/05/12/announcing-ef-core-2-0-preview-1/

(该功能已经可用于&#34;普通&#34;实体框架)