所以我建立了一个基础库,我们称它为A,它有许多简单的类。该库不应该使用实体框架引用,因为您可以在不使用数据库的情况下处理这些对象。在引用的库中使用对象作为实体框架模型?
然后我有另一个名为A.EntityFramework的库,它应该添加使用Entity Framework将这些对象放入数据库的能力。
我的问题是,要能够将它们与实体框架一起使用,我需要基础库中类定义的属性[Key],[Index]等。但是那些属性是在实体框架中定义的,该库不参考...
解决这种情况的正确方法是什么?
所以我建立了一个基础库,我们称它为A,它有许多简单的类。该库不应该使用实体框架引用,因为您可以在不使用数据库的情况下处理这些对象。在引用的库中使用对象作为实体框架模型?
然后我有另一个名为A.EntityFramework的库,它应该添加使用Entity Framework将这些对象放入数据库的能力。
我的问题是,要能够将它们与实体框架一起使用,我需要基础库中类定义的属性[Key],[Index]等。但是那些属性是在实体框架中定义的,该库不参考...
解决这种情况的正确方法是什么?
您可以在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。
谢谢,正是我在找的! :) – CodeOrElse
将实体对象保留为实体框架,然后映射到单独的域对象。不要将您的数据模型绑定到您的域模型。也尝试搜索。或者,如果你坚持,在你的DbContext ModelCreating()中使用[流利的映射](https://stackoverflow.com/questions/21018067/entity-framework-code-first-model-separation-from-domain)。 – CodeCaster
[在ASP.MVC中为视图模型导出数据库模型]的可能重复(https://stackoverflow.com/questions/46190851/deriving-a-database-model-for-view-model-in-asp-mvc) – Sefe
CodeCaster,通常我会同意你的看法,在这种情况下,尽管我只需要添加对象和SaveChanges,就这样,因此将它们映射到另一个对象并将其保存起来会导致性能浪费。 OnModelCreating()中的流畅映射看起来像是我的方式。谢谢! – CodeOrElse