2017-09-19 49 views
0

所以我建立了一个基础库,我们称它为A,它有许多简单的类。该库不应该使用实体框架引用,因为您可以在不使用数据库的情况下处理这些对象。在引用的库中使用对象作为实体框架模型?

然后我有另一个名为A.EntityFramework的库,它应该添加使用Entity Framework将这些对象放入数据库的能力。

我的问题是,要能够将它们与实体框架一起使用,我需要基础库中类定义的属性[Key],[Index]等。但是那些属性是在实体框架中定义的,该库不参考...

解决这种情况的正确方法是什么?

+1

将实体对象保留为实体框架,然后映射到单独的域对象。不要将您的数据模型绑定到您的域模型。也尝试搜索。或者,如果你坚持,在你的DbContext ModelCreating()中使用[流利的映射](https://stackoverflow.com/questions/21018067/entity-framework-code-first-model-separation-from-domain)。 – CodeCaster

+0

[在ASP.MVC中为视图模型导出数据库模型]的可能重复(https://stackoverflow.com/questions/46190851/deriving-a-database-model-for-view-model-in-asp-mvc) – Sefe

+0

CodeCaster,通常我会同意你的看法,在这种情况下,尽管我只需要添加对象和SaveChanges,就这样,因此将它们映射到另一个对象并将其保存起来会导致性能浪费。 OnModelCreating()中的流畅映射看起来像是我的方式。谢谢! – CodeOrElse

回答

3

您可以在DbContext类的OnModelCreating方法中定义这些属性。

例如:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    //Class1 
    modelBuilder.Entity<A.Class1>.HasKey(p => p.ID); 
    modelBuilder.Entity<A.Class1>.Property(p => p.Field1).IsRequired().HasMaxLength(50); 

    //Class2 
    modelBuilder.Entity<A.Class2>.HasKey(p => new { 
     p.Key1, 
     p.Key2 
    }); 
    modelBuilder.Entity<A.Class2>.Property(p => p.Key1).IsRequired().HasColumnOrder(1); 
    modelBuilder.Entity<A.Class2>.Property(p => p.Key2).IsRequired().HasColumnOrder(2); 
} 

您可以了解更多关于实体框架流利API here

+0

谢谢,正是我在找的! :) – CodeOrElse

相关问题