标签: database-first

枚举EF 5.0 - 数据库优先

如果我使用Database First,如何使我的上下文对象使用Entity Framework 5.0中的Enum功能.

c# enums entity-framework database-first entity-framework-5

27
推荐指数
1
解决办法
6841
查看次数

Code First与Database First

我基于现有数据库创建了一个实体框架模型,然后从模型中生成了POCO实体.我的web.config中的连接字符串不是实体框架,它只是标准连接字符串(它缺少CSDL,SSDL,MSL引用).

我可以编译我的应用程序,但是当我运行时,我收到此错误:

如果在Code First模式下使用,使用T4模板为Database First和Model First开发生成的代码可能无法正常工作.要继续使用Database First或Model First,请确保在执行应用程序的配置文件中指定了Entity Framework连接字符串.要使用从Database First或Model First生成的这些类,使用Code First添加任何其他配置,使用属性或DbModelBuilder API,然后删除引发此异常的代码


我的问题是,在我的代码中,它实现了POCO来自自动生成,我怎样才能让它像Code First一样?我不想在我的连接字符串中引用CSDL等.

c# entity-framework code-first entity-framework-4.1 database-first

20
推荐指数
2
解决办法
2万
查看次数

"没有可执行文件找到匹配命令dotnet-ef"错误与EF Core数据库优先

如您所知,最新版本的Visual Studio 2017放弃了'project.json' .csproj而是使用了它.

我正在使用RTM版本,并希望按照本指南从现有数据库生成模型.我在最后一步遇到错误:

Package Manager控制台的Entity Framework Core命令尚不支持基于csproj的.NET Core项目.请改用.NET命令行工具(即dotnet ef).有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=834381.

发生错误后,我使用了它提到的链接切换到dotnet ef.这是我的包管理器命令:

PM> dotnet ef dbcontext scaffold"Server =.; Database = Jumpstart; Trusted_Connection = True;" Microsoft.EntityFrameworkCore.SqlServer

然后错误再次出现:

dotnet:找不到匹配命令"dotnet-ef"的可执行文件

我使用了help命令,发现dotnet没有名为ef的命令.

我只想从现有数据库生成模型.

entity-framework visual-studio database-first dbcontext

16
推荐指数
2
解决办法
7760
查看次数

将新列添加到实体框架中的现有表

我在数据库中的表中添加了一个新列.该表已在现有的Entity Framework模型中定义.我已经完成了大部分关于如何做到这一点的项目,但它仍然失败了.

有一点背景,这个实体模型至少在3年内没有更新.所以除了我要添加的列之外,我知道在那段时间里已经添加了许多其他列,但从未包括在内.我大约9个月前接手了这个项目,但从未能成功更新模型.

第一次尝试:

  • 在Visual Studio中打开模型
  • 右键单击背景
  • 单击"从数据库更新模型..."
  • 单击"刷新"选项卡
  • 选定的表格
  • 突出显示的具体表格
  • 单击完成

结果:

  • 删除了我模型中的数十个表的类
  • 有问题的表没有更新

第二次尝试

  • 恢复所有来源
  • 与上面相同但是
  • 打开更新向导后,单击"删除"选项卡
  • 选定的表格
  • 单击完成
  • 所有表格都被删除了
  • 保存EF模型/关闭/打开它
  • 返回更新向导添加选项卡
  • 点击表格
  • 扩展所有内容时,我的表都没有显示
  • 选中"表"级别的复选框

结果

  • 我没有添加任何表格,但添加了最初未包含的内容

第三次尝试

  • 恢复所有来源
  • 删除了两个.tt文件
  • 打开更新向导
  • 点击添加一切

结果

  • 没有重新创建,没有.tt文件或其他任何东西.

第四次尝试

  • 恢复来源
  • 从EF模型中删除了表格
  • 打开更新向导
  • 单击"添加表"

结果

  • 删除了我模型中的数十个表的类
  • 有问题的表格没有加回来

最后的尝试

  • 手动添加实体到模型

结果

  • 代码全部编译并运行,但从未从数据库中检索或更新值

我将非常感激任何可以提供的帮助或方向,因为我处于关键时刻并且必须更新模型.

entity-framework database-first ef-database-first

15
推荐指数
4
解决办法
3万
查看次数

是否可以阻止EntityFramework 4覆盖自定义属性?

我首先使用EF 4数据库+ POCO.因为EF没有简单的方法来声明传入的DateTimes是种类的UTC,所以我将属性从自动生成的文件移动到另一个文件中的部分类.

    private DateTime _createdOn;
    public virtual System.DateTime CreatedOn
    {
        get { return _createdOn; }
        set
        {
            _createdOn =
                (value.Kind == DateTimeKind.Unspecified)
                    ? _createdOn = DateTime.SpecifyKind(value, DateTimeKind.Utc)
                    : value;
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,现在每次更新模型时,都会在T4代中再次创建自动化属性.当然这会导致以下编译错误:"类型'Foo'已包含'CreatedOn'的定义".

有没有办法告诉EF不生成该属性并让我自己处理它?

更新

谢谢大家的答案......

我创建了一个具有不同名称的新自定义属性.

    public virtual System.DateTime CreatedOnUtc
    {
        get
        {
            return (CreatedOn.Kind==DateTimeKind.Unspecified)
                ? DateTime.SpecifyKind(CreatedOn, DateTimeKind.Utc)
                : CreatedOn;
        }
        set
        {
            CreatedOn =
                (value.Kind == DateTimeKind.Unspecified)
                    ? CreatedOn = DateTime.SpecifyKind(value, DateTimeKind.Utc)
                    : value;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我还将自动生成属性的所有setter和getter设置为Private,但我需要在Linq-to-Entities查询(叹气)中使用这些属性.在这些情况下,我将这些吸气剂设置为内部.

我确定希望在DateTime类型上有一个下拉列表,指定EF应该将其视为DateTime的"种类".这样可以节省数小时和额外的复杂功能.

c# entity-framework poco entity-framework-4 database-first

14
推荐指数
4
解决办法
1万
查看次数

有没有办法先在数据库中更改连接字符串?

我有几个数据库,它们的架构是相同的.当我使用数据库优先时,在创建edmx文件时指定连接字符串.我想知道,有没有办法改变连接字符串?这是,所以我可以选择要运行的数据库.Thx提前!

entity-framework database-first

14
推荐指数
2
解决办法
2万
查看次数

MVC DB首先修复显示名称

我正在使用mvc 4,首先使用数据库.

每次刷新model.edmx文件时,都会删除我添加的显示名称属性.如何在刷新之间保持显示名称属性?

asp.net-mvc database-first

12
推荐指数
2
解决办法
5807
查看次数

在Database First中更改实体和属性名称

我正在启动一个必须使用现有数据库的新应用程序,该数据库使用一些在.net中非常烦人的命名约定(表名以几个指定表的业务域的三元组开头,列名以表trigram开头,三元组是大写的,由下划线等分隔,).

我想做的是编写一个简单的重命名规则(这很简单,就像找到最后一个下划线并在此之后采取一切)并将其应用于实体框架中.我真的不想在编辑器中逐个编辑名称,特别是因为数据库可能会改变,我不想多次这样做.

我正在使用Database First(因为数据库已经存在并且它是"主")和EF 4.x DbContext Generator,它开箱即用(虽然命名很糟的类和属性).

我编辑了T4模板以重命名生成的实体和属性,但是当我尝试执行任何请求时,DbContext对象找不到与我尝试请求的实体匹配的表,并且我得到了以下异常:

实体类型[实体名称]不是当前上下文的模型的一部分.

这显然是为什么它没有找到表:没有什么告诉它如何匹配实体名称和表,因为我在运行中更改它.我读到我可以在OnModelCreating(DbModelBuilder modelBuilder)方法中添加指令,但这不在Database First中使用(默认的T4模板在其中添加了一个例外,以防万一).

所以现在我卡住了,我不知道如何指定匹配.

以下是我的几个想法,但不确定它是否正确或可行:

  • 使用"复数/单数"API来更改实体的名称?听起来像一个肮脏的解决方法.但它可能有效(尽管没有尝试).
  • 寻找一种即时编辑EDMX文件的方法.
  • 之后编辑EDMX但它可能使过程复杂化(在设计器中编辑,然后执行工具来改变EDMX,然后运行自定义工具来重新生成实体和DbContext ......而今天我只需要在设计器中编辑).
  • 使用Code First(因为使用不同的实体名称而不是表名,通过DbContext类中的属性或指令似乎更容易),但听起来将它与现有数据库一起使用并不会更复杂.

任何的想法 ?还是我错过了什么?

c# entity-framework entity-framework-4 database-first ef-database-first

11
推荐指数
1
解决办法
5270
查看次数

实体框架无法使用正在创建的模型DbContext

我正在使用EF 4.1,我创建了一个普通的EF edmx文件.我是从DB生成的.

当它生成时,我右键单击并选择添加代码生成项,生成新类,然后使用DbContext.我使用模板DbContext生成器.

一切正常.

然后我trie查询上下文:

using (var context = new PasDBEntities())
{
    var client=context.ClientCompanies.SingleOrDefault(_=>_.ID==clientCompanyId);
    if(client!=null)
Run Code Online (Sandbox Code Playgroud)

我在创建上下文的新实例时没有问题但是当我尝试查询它时会出现问题.我陷入了UnintentionalCodeFirstException.并得到错误:

{"如果在Code First模式下使用,则使用T4模板为Database First和Model First开发生成的代码可能无法正常工作.要继续使用Database First或Model First,请确保在执行应用程序的配置文件中指定了Entity Framework连接字符串要使用从Database First或Model First生成的这些类,使用Code First添加任何其他配置,使用属性或DbModelBuilder API,然后删除引发此异常的代码."}

我不想先使用代码,但我不知道是否可以"关闭"它,或者问题出在哪里.

供参考,这是我的构造函数......

public partial class PasDBEntities : DbContext
{
    public PasDBEntities()
        : base("PasDBEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
Run Code Online (Sandbox Code Playgroud)

...和连接字符串:

<connectionStrings>
    <add name="PasDBEntities" 
         connectionString="metadata=res://*/PasDB.csdl|
                                    res://*/PasDB.ssdl|
                                    res://*/PasDB.msl;
                           provider=System.Data.SqlClient;
                           provider connection string=&quot;
                           data source=localhost;
                           initial catalog=PasDB;
                           integrated security=True;
                           pooling=False;
                           multipleactiveresultsets=True;
                           App=EntityFramework&quot;"
         providerName="System.Data.EntityClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

entity-framework connection-string entity-framework-4.1 database-first

10
推荐指数
1
解决办法
1万
查看次数

实体框架 - DB-First - 复合外键

我有一个数据库,其中包含一个带有2列主复合键的表(一个int,一个bigint.)我有两个具有复合外键的表,引用第一个表的复合主键.(就我所知,)数据库本身的关系很好,很花哨.

通过DB-first EF6生成DB上下文时,这些关系/导航属性不会在生成的模型中表示(两个子表中没有虚拟成员引用父表.)

由于它是db-first,我无法修改模型.

entity-framework composite-key database-first ef-database-first entity-framework-6

10
推荐指数
1
解决办法
944
查看次数