标签:c net entity-framework ef-code-first entity-framework-6
我有现有的poco模型和我想要与EF 6一起使用的现有数据库.但是我的许多模型都具有不映射到数据库中的列的属性.当EF向sql发送select语句时,它会询问这些属性,例如它们是列,但由于列不存在,EF最终会抛出“无效列名”异常.
EF 6中是否有一个约定,它将所有poco属性视为列类型?如果是这样,哪个惯例对此负责?如果没有,还有哪种其他机制导致此行为,以及如何禁用它?
理想情况下,我希望我的实现仅将poco属性视为db中的列,如果我在EntityTypeConfiguration中显式映射它,如下所示:
public class MyPocoMap : EntityTypeConfiguration<Authorization>
{
public MyPocoMap()
{
this.Property(t => t.MyPropName).HasColumnName("MyColumnName");
}
}
对于我不希望EF映射的所有属性,不必执行此操作:
this.Ignore(t => t.MyPropName);
这是我如何进行映射的示例.我想找到一种方法来禁用NotColumn1和NotColumn2属性的映射,而无需显式使用流畅的api来忽略每个属性.
public class MyContext : DbContext
{
static MyContext()
{
Database.SetInitializer<MyContext>(null);
}
public MyContext()
: base("Name=MyContext")
{
}
public DbSet<MyModel> MyModels { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new MyModelMap());
}
}
public class MyModel
{
public int CustomId { get; set; }
public string MyColumn1 { get; set; }
public string MyColumn2 { get; set; }
public string NotColumn1 { get; set; }
public string NotColumn2 { get; set; }
}
public class MyModelMap : EntityTypeConfiguration<MyModel>
{
public MyModelMap()
{
this.ToTable("MyTable");
this.HasKey(t => t.CustomId);
this.Property(t => t.MyColumn1).HasColumnName("Column1Name");
this.Property(t => t.MyColumn2).HasColumnName("Column2Name");
this.Ignore(t => t.NotColumn1);
this.Ignore(t => t.NotColumn2);
}
}
解决方法:
在EF6中,您可以使用以下自定义约定代码:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Properties()
.Where(p => p.Name == "SomePropertyName")
.Configure(p => p.Ignore());
}
您可以在此address中找到更多针对EF6at的自定义代码对话
标签:c,net,entity-framework,ef-code-first,entity-framework-6 来源: https://codeday.me/bug/20190624/1276998.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。