使用包含接口的Entity Framework 6.1.2保留对象

时间:2015-04-24 16:13:25

标签: c# .net entity-framework

使用Entity Framework将某些对象持久化到SQL Server数据库时遇到了一些困难。我正在尝试使用代码第一种方法来执行以下操作:

public class ObjectA
{
    public string Name { get; set; }
    public IMyInterface InterfaceObject { get; set; }
    public ObjectD AnotherObject { get; set; }
}

public interface IMyInterface
{
}

public class ObjectB : IMyInterface
{
    public string SomePropertyB { get; set; }
}

public class ObjectC : IMyInterface
{
    public string SomePropertyC { get; set; }
}

public class ObjectD
{
    public string SomePropertyD { get; set; }
}

My Application Context类包含以下内容:

    public DbSet<ObjectA> ObjectA { get; set; }
    public DbSet<ObjectB> ObjectB { get; set; }
    public DbSet<ObjectC> ObjectC { get; set; }
    public DbSet<ObjectD> ObjectD { get; set; }

更新数据库后,它包含上述每个实体的表。当我尝试使用context.SaveChanges()保存ObjectA时,ObjectA和ObjectD中的数据是持久的,但InterfaceObject后面的ObjectB或ObjectC不会保留。

我试图做的甚至可能吗?如果没有,是否有人对其他持久化ObjectA的方法有任何想法,以便它只能有一个ObjectB或ObjectC的实例,而不是两者都有?

1 个答案:

答案 0 :(得分:2)

我通过使接口成为带有Id字段的抽象类来解决这个问题:

public interface IMyInterface
{
        [Key]
        public int Id { get; set; }
}

现在,在数据库中,每个层次结构使用一个表来表示相关的类。