Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法在单独的项目中使用DbModelBuilder_C#_.net_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 无法在单独的项目中使用DbModelBuilder

C# 无法在单独的项目中使用DbModelBuilder,c#,.net,asp.net-mvc,entity-framework,C#,.net,Asp.net Mvc,Entity Framework,在我的解决方案中,我有几个项目,它们一起构成了一个web应用程序的一部分 我正忙着在我的上下文类中设置实体框架,而不必在 protected override void OnModelCreating(DbModelBuilder modelBuilder) 方法,我希望能够在我的Model类中创建一个名为ConfigureModel的方法,然后在那里配置所有主键/外键设置,因此它应该如下所示: public class UserRolesModel : ModelBase { #r

在我的解决方案中,我有几个项目,它们一起构成了一个web应用程序的一部分

我正忙着在我的上下文类中设置实体框架,而不必在

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
方法,我希望能够在我的
Model
类中创建一个名为
ConfigureModel
的方法,然后在那里配置所有主键/外键设置,因此它应该如下所示:

public class UserRolesModel : ModelBase
{
    #region Configuration

    public static void ConfigureModel(DbModelBuilder modelBuilder)
    {
        //necessary code here
    }

    #endregion
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    UserRolesModel.ConfigureModel(modelBuilder);
}
并且,例如,按如下方式调用该方法:

public class UserRolesModel : ModelBase
{
    #region Configuration

    public static void ConfigureModel(DbModelBuilder modelBuilder)
    {
        //necessary code here
    }

    #endregion
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    UserRolesModel.ConfigureModel(modelBuilder);
}
我面临的问题是在我的
ConfigureModel
方法中:我似乎无法解决
DbModelBuilder
引用。即使我将
System.Data.Entity
dll添加到我的引用中,它也不起作用。我需要将实体框架安装到这个单独的项目中,这样才能工作

当然,我不必为我想在中使用
DbModelBuilder
的每个项目添加EF

实现这一目标的另一种方式是什么


谢谢

我遇到了一个类似的问题,我的从属项目无法解决与EF相关的引用


我不得不将EntityFramework.dll和EntityFramework.SqlServer.dll这两个程序集的引用添加到正在抱怨的项目中,从而解决了问题

这是你问过我的2美分。不要把流畅的代码放在你的模型中——这是一种糟糕的关注点分离,会把它们弄得乱七八糟(非POCO)。一个替代大型onmodel创建的好方法是:

1) 在项目中创建一个名为“EntityConfiguration”的上下文文件夹。在大型项目中,您可以将其进一步划分为“EntityConfiguration\System”、“EntityConfiguration\Employee”等

2) 为每个项目添加类:

public class ProductConfiguration : EntityTypeConfiguration<Product>
{
    public ProductConfiguration()
    {
        HasKey(p => p.ProductId);
        Property(p => p.ProductName)
           .IsRequired()
           .HasMaxLength(200);
        ...
    }

}

这对我们的团队很有效。您几乎从未看过流畅的代码,因此将其排除在我们每天查看的模型之外是一件好事。

您是否引用了正确的.Net版本?顺便说一句,使用NuGet要容易得多。只需将包添加到您的项目中。但是配置不应该发生在EF程序集中吗,这样你就可以将类程序集从EF中解耦?@GertArnold我的解决方案中有一个名为Common的项目,在这里我放置所有将在整个项目中使用的模型。因为这些模型将映射到我的表,所以我想在它们内部进行配置。你建议我在哪里进行所有必要的配置?我不知道,不知道你的项目。但我不喜欢多个库都依赖于EF的想法。也许一个映射程序集可以完成所有映射?@GertArnold谢谢你的想法。如果我理解正确,你是否认为我应该创建一个类,就像程序集中引用EntityFramework的“Initialize”类一样,并在那里进行所有映射?你基本上是在告诉我你和我有一些相同的问题,你最终通过添加EnittyFramework.dll解决了这个问题,我也这么做了。我真的很喜欢这种方法,谢谢你的努力和时间。如果我在与“数据访问层”相同的项目中执行此操作,这也意味着我不必在另一个实际不需要的项目中添加EntityFramework.dll。再次感谢,非常感谢。