繁体   English   中英

使用包含接口的Entity Framework 6.1.2持久化对象

[英]Persisting an object using Entity Framework 6.1.2 that includes an interface

我在使用实体框架将某些对象持久保存到SQL Server DB时遇到了一些困难。 我正在尝试使用代码优先方法进行如下操作:

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; }
}

我的应用程序上下文类包含以下内容:

    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的一个实例,而不能同时具有两者?

我通过使接口成为具有ID字段的抽象类来解决此问题:

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

现在在数据库中,它使用每个层次结构的表来表示所讨论的类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM