覆盖相关实体中的属性

时间:2014-01-29 10:21:29

标签: c# entity-framework

有没有办法覆盖基类的属性?

更具体地说,我有这样的事情:

public enum BigList
{
    One = 1,
    Two,
    Three,
    Four,
    Five
}

public enum SmallListA
{
    Orange = 1,
    Apple = 3
}

public enum SmallListB
{
    Dog = 2,
    Cat = 4,
    Parrot = 5
}

[Table("First")]
public abstract class First
{
    [Key]
    public int Id { get; set; }

    public BigList val { get; set; }
}

[Table("Second")]
public class Second : First
{
    public SmallListA val { get; set; }
    public string Something { get; set; }
}

[Table("Third")]
public class Third : First
{
    public SmallListB val { get; set; }
    public int CountIt { get; set; }
}

public class MyContext : DbContext
{
    public MyContext()
        : base("ConnectionString")
    {
        Database.SetInitializer<MyCollection>(new DropCreateDatabaseIfModelChanges<MyCollection>());
    }

    public DbSet<First> Firsts { get; set; }
    public DbSet<Second> Seconds { get; set; }
    public DbSet<Third> Thirds { get; set; }
}

public class Program
{ 
    static void Main(string[] args)
    {
        MyContext context = new MyContext();
        var l = context.Firsts.ToList();

        context.Seconds.Add(new Seconds(){val=SmallListA.Apple});
        context.SaveChanges();

        l = context.Firsts.ToList();

        First f = l[0];
        Second s = (Second)l[0];
    }

当prevoius代码第一次运行时,它会在DB中创建3个表:

TABLE [dbo].[First](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [val] [int] NOT NULL
)
TABLE [dbo].[Second](
    [Id] [int] NOT NULL,
    [Something] [nvarchar](max) NULL
)
TABLE [dbo].[Third](
    [Id] [int] NOT NULL,
    [CountIt] [int] NOT NULL
)

第二和第三名是来自First的外键。

我期望发生的事情是,在First Table'val'列中将具有值3(Apple)并将在变量中正确反映

实际上,在f变量val中为0 而在变量val中是Apple(即使是强硬也应该是同一个对象)。 更重要的是,DB中的实际值为0。 并且当你再次加载程序时,s中的val突然为0(显然苹果值是因为它没有从数据库加载而是从内存加载)

现在,问题是关于是否有一种方法可以完全覆盖val属性,因此它将按照我们的意愿运行(保存将保存正确的值)

0 个答案:

没有答案