有没有办法覆盖基类的属性?
更具体地说,我有这样的事情:
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属性,因此它将按照我们的意愿运行(保存将保存正确的值)