我正在使用Entity Framework将数据插入2个不同的数据库中。一个数据库中有几列,而另一数据库中没有。它们的数据类型不能为空(int和float)。
我不在代码中使用这些列(如果存在)。这意味着我只将0用作它们的数据,但是我显然不能发送null。
我是否可以轻松地插入数据而无需为此创建两个不同版本的应用程序?理想情况下,我只想拥有一个模型,该模型具有类似属性的属性,如果可用,则在此列中插入0。
答案 0 :(得分:1)
如果您的应用程序仅针对一个数据库运行,那么您可以在OnModelCreating中使用IF语句,该语句使用Fluent API .Ignore()缺少属性。
public class MyDbContextWithMissingColumns: MyDbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
if (myConfig.UseDatabaseWithoutSomeProperties)
{
modelBuilder.Entity<Foo>().Ignore(f => f.SomeProperty);
}
base.OnModelCreating(modelBuilder);
}
}
如果应用程序的单个实例连接到两个数据库,则必须使用单独的DbContext子类型,因为OnModelCreating仅在AppDomain中对DbContext类型的第一个实例运行。
EG:
public class MyDbContextWithMissingColumns: MyDbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Foo>().Ignore(f => f.SomeProperty);
base.OnModelCreating(modelBuilder);
}
}
答案 1 :(得分:-1)
在具有受限字段的数据库存储库中,创建实体:
[NotMapped]
其中的属性为&s
。使用该字段将不会出现在数据库中,但是您可以在其他任何地方使用它。这样一来,您就可以确定底层编写的内容,而您的应用程序不在乎。