我需要扩展当前数据库实体(Foo
)以包含新字段。听起来很容易,但我在解决方案上遇到了困难。问题是,我无法为Foo
创建部分类,因为它是我正在使用的dll的一部分。而且没有办法按照我想要的方式请求修改Foo
(或自己这样做)。
我的项目结构类似于这样:
// unmodifiable because part of dll
class Foo
{
int Id { get; set; }
string Name { get; set; }
}
// unmodifiable because part of dll
interface IFooContext
{
DbSet<Foo> Foo { get; set; }
}
class FooContext: DbContext, IFooContext
{
DbSet<Foo> Foo { get; set; }
}
基于我有限的 .net 知识,我的尝试是创建一个继承自 Foo
的类 Bar
,并期望通过实现扩展类 Bar
来足够实现 IFooContext
。
如下所示,但最终会出现错误,因为 C# 不允许使用扩展类替换父类。
class Bar: Foo
{
string Description { get; set; } //new field
}
class FooLoader: DbContext, IFooContext
{
DbSet<Bar> Foo; //error because DbSet<Foo> required
}
我可以做的是,在
FooLoader
中创建属性 DbSet<Bar> Bar { get; set; }
, 但这样会导致两个几乎相同的数据库表:Foo 和 Bar。因此,我进行了修改,并创建了一个包含
FooId
的类Bar
, 从而得到了两个表,其中Bar
表引用了Foo
。class Bar
{
int Id { get; set; }
Foo Foo { get; set; }
int FooId { get; set; }
string Description { get; set; }
}
这两种情况都会创建一个新的表,但我不确定是否符合我的要求。还有其他方法可以实现,并将新字段包含在基类/表中吗?