标签: entity-framework-5

我可以将枚举存储为EF 5中的字符串吗?

我们在解决方案中使用EF CF已有一段时间了.大粉丝!到目前为止,我们一直在使用hack来支持枚举(在模型上创建一个额外的字段;忽略enum durring映射;以及将额外字段映射到我们将使用的db中的列).传统上我们一直将我们的枚举存储为DB中的字符串(varchars)(使其变得美观和可读).现在有了EF 5(Beta 2)中的枚举支持,它看起来只支持将枚举枚举到DB中的int列....我们可以让EF 5将我们的枚举存储为它们的字符串表示.

其中"Type"是DocumentType类型的枚举

public enum DocumentType 
    {
        POInvoice,
        NonPOInvoice,
        Any
    }
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下方法进行映射:

public class WorkflowMap : EntityTypeConfiguration<Model.Workflow.Workflow>
    {
        public WorkflowMap()
        {
            ToTable("Workflow", "Workflow");
            ...
            Property(wf => wf.Type).HasColumnType("varchar"); 

        }
    }
Run Code Online (Sandbox Code Playgroud)

我以为是魔术子弹但是......

这只是抛出:

指定的架构无效.错误:(571,12):错误2019:指定的成员映射无效.类型'Dodson.Data.DataAccess.EFRepositories.Workflow'中成员'Type'的类型'Dodson.Data.DataAccess.EFRepositories.DocumentType [Nullable = False,DefaultValue =]'与'SqlServer.varchar不兼容[Nullable =在'CodeFirstDatabaseSchema.Workflow'类型中成员'Type'的False,DefaultValue =,MaxLength = 8000,Unicode = False,FixedLength = False]'.

你的意见?

entity-framework entity-framework-5

17
推荐指数
2
解决办法
9297
查看次数

实体框架5.0处理乐观并发异常?

context.SaveChanges()其中一个例外情况下处理几个潜在的异常时OptimisticConcurrency.有关此问题的Microsoft文档,请访问http://msdn.microsoft.com/en-us/library/bb399228.aspx,对于EF 4.x进行了讨论.

try
{
    // Try to save changes, which may cause a conflict.
    int num = context.SaveChanges();
    Console.WriteLine("No conflicts. " +
        num.ToString() + " updates saved.");
}
catch (OptimisticConcurrencyException)
{
    // Resolve the concurrency conflict by refreshing the 
    // object context before re-saving changes. 
    context.Refresh(RefreshMode.ClientWins, orders);

    // Save changes.
    context.SaveChanges();
    Console.WriteLine("OptimisticConcurrencyException "
    + "handled and changes saved");
}
Run Code Online (Sandbox Code Playgroud)

...但是在EF 5.0(RC)上,这似乎不起作用,因为Refresh()我的EF5,代码优先,DbContext派生context类上不存在.

我确实看到了context.Entry(context.SalesOrderHeaders).Reload();- 但这似乎是一个直接从db重新加载而不是刷新/合并(与策略客户端获胜).

任何想法如何处理EF5中的乐观并发异常?实际上甚至在SaveChanges()中关于异常处理的一般指针都会很好

谢谢

entity-framework-5

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

现在更新为EF5 NotMapped注释不起作用

我刚刚将entityframework更新到最新的5.0.0版本.并且NotMapped注释现在不起作用.我试图谷歌找到答案来解决它,但找不到.当您更新实体框架并知道修复此问题的解决方案时,任何人都有同样的问题吗?

c# entity-framework-5

17
推荐指数
1
解决办法
9047
查看次数

EF5迁移 - 删除约束时重复/重新定义的变量错误| 使用SQL GO命令的问题

背景:

我们有一个项目使用其中包含在长时间开发期间创建的多个(读取~60个)迁移.当然,其中一些迁移还涉及:

  • 取消约束1,2
  • 创建触发器

我们跑的时候都是独角兽和彩虹

Update-Database
Run Code Online (Sandbox Code Playgroud)

因为每个迁移都作为单独的批处理运行.但是在SQL Scripts使用时为这些迁移创建时

Update-Database -Script
Run Code Online (Sandbox Code Playgroud)

我们遇到了一些问题,如下所述:

问题1:

在多个迁移文件中删除多个约束时,EF生成的脚本会重新声明它用于删除的变量.这是因为它确保了同一个迁移文件中变量名的唯一性,但是在更改文件时,它会重置计数器,从而重叠名称.

问题2:

SQL强制执行CREATE TRIGGER始终是批处理中的第一个语句.生成脚本时,EF无视内容,Sql("CREATE TRIGGER ... ");因此不会特别对待它.因此,该语句可能出现在脚本文件的中间,并且出错.

解决方案:(或者我们想到了!)

这两个问题的常见/常识解决方案是在正确的位置插入开始/结束sql批处理.手动这样做会让我成为一个非常富有的人,所以这不是一个有效的解决方案.

相反,我们使用了@DavidSette提供技术.创建一个新的BatchSqlServerMigrationSqlGenerator继承,SqlServerMigrationSqlGenerator从中有效地覆盖dropColumnOperation,sqlOperation然后GO围绕敏感的声明强制声明:

protected override void Generate (System.Data.Entity.Migrations.Model.DropColumnOperation dropColumnOperation)
{
    base.Generate(dropColumnOperation);
    Statement("GO");
}
Run Code Online (Sandbox Code Playgroud)

Boo Boo:

此解决方案在Update-Database没有-Script标志的情况下中断运行并出现以下错

System.Data.SqlClient.SqlException (0x80131904): Could not find stored procedure 'GO'.
Run Code Online (Sandbox Code Playgroud)

这是我们的自定义生成器添加的.现在我不确定为什么,但EF应该有一个很好的理由不认识GO!

更多信息:

  1. 迁移:在脚本中复制@ var0变量,删除两个约束
  2. 变量名'@number'已经声明
  3. 如何覆盖MigratorScriptingDecorator生成的SQL脚本 …

t-sql entity-framework ef-migrations entity-framework-5

17
推荐指数
1
解决办法
1374
查看次数

我如何以编程方式读取EF DbContext元数据?

我有使用EF-CodeFirst 5的应用程序(dll ver 4.4.0.0,在.net 4.0上).

我需要能够读取实体元数据,以便我可以为给定的条目类型获取以下信息:

  • 哪些属性是一对多关系(引用实体)
  • 哪些属性是多个关系(引用当前属性的实体集合)
  • 也很好,但不是绝对必要:哪些属性是很多关系(关系的集合)

我可以通过在属性列表上编写foreach循环来获取此信息,然后通过依赖所有虚拟引用来"识别"它们,但我觉得这不是"正确的"方式.我知道EdmxWriter可以提供xml格式的信息,但它是通过访问不能公开访问的InternalContext来实现的,我想直接获得强类型列表/数组,而不使用那个xml.我应该使用哪种API(如果有这样的API,似乎我找不到它)?

metadata ef-code-first entity-framework-5

17
推荐指数
1
解决办法
9745
查看次数

Windows Azure SQL数据库 - 标识自动增量列会跳过值

目前正在使用Entity Framework 5处理ASP.Net MVC 4应用程序.使用CodeFirst进行初始开发阶段.但现在已禁用自动迁移并直接使用SSMS设计新表并编写POCO.一切都很好.

最近,在生产中发现了一个奇怪的问题.其中一个最初设计的表中的记录跳过自动增量标识值超过900个数字.这在过去3个月内发生了3次.在本地调试应用程序但无法重现.没有观察到任何模式或趋势.

模型:

public class Enquiry
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public Int64 EnquiryId { get; set; }

    [Required]
    public int UserId { get; set; }

    [Required]
    public byte Bid { get; set; }

    ...

    [Required]
    public DateTime Created { get; set; }

    [Required]
    public DateTime Modified { get; set; }
}

public class EnquiryDetail
{
    [Key]
    public Int64 EnquiryId { get; set; }

    [Required]
    public int CreditScore { get; set; }

    [Required]
    public byte BidMode { get; …
Run Code Online (Sandbox Code Playgroud)

sql-server entity-framework asp.net-mvc-4 entity-framework-5 azure-sql-database

17
推荐指数
1
解决办法
6160
查看次数

启用 - 迁移安装错误

我在其中一个项目上启用迁移时遇到了问题.我Enable-Migrations从Nuget控制台执行命令并收到错误说:

Exception calling "SetData" with "2" argument(s): "Type 
'Microsoft.VisualStudio.TeamArchitect.ModelingProject.ModelProjectAutomationObject' in assembly 
'Microsoft.VisualStudio.TeamArchitect.ModelingProject, Version=11.0.0.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable."
At D:\Solution\packages\EntityFramework.5.0.0\tools\EntityFramework.psm1:391 char:5
+     $domain.SetData('startUpProject', $startUpProject)
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SerializationException
Run Code Online (Sandbox Code Playgroud)

有没有人在此之前遇到这个问题可以指出我正确的方向.

环境:
.NET 4.5
实体框架5
Visual Studio 2012 Update 2

entity-framework ef-migrations entity-framework-5 visual-studio-2012

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

JSON.NET DataContractJsonSerializer和Newtonsoft JSON序列化程序有什么区别

有人能帮我吗.

内置的JSON.NET DataContractJsonSerializer和Newtonsoft JSON序列化程序之间有什么区别?

我可以在Web API中使用其中一个是正确的,为什么我会选择一个?

c# asp.net asp.net-mvc entity-framework entity-framework-5

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

来自数据库的Entity Framework 5更新模型不生成表类

我在VS2012中使用EF5,数据库第一种方法.

当我将新表X添加到设计图面时,表格显示,然后我保存并编译而没有错误.但是,没有生成类X(在解决方案资源管理器中的MyModel.tt下).

如果我右键单击MyModel.tt并选择"运行自定义工具",则会生成类.

此行为与我在EF4和VS 2010中所遇到的不同,后者会自动生成类.

  1. 我可以更改此行为以便自动生成表类吗?
  2. 为什么不自动生成表的类?

entity-framework-5

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

使用时出错

我有一个错误

using语句中使用的类型必须可以隐式转换为'System.IDisposable'

在线

using (var context = new EntityContainer())
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Globalization;
using System.Data;
using System.Data.Entity;
using school.usi.susibar.model;

namespace school.usi.susibar.test
{
    class Program
    {

        public static void Main(string []args)
         {
            using (var context = new EntityContainer())
            {

                addOrderStatusType(context);

                Console.ReadLine();
            }
        } 


        private static void addOrderStatusType(EntityContainer context)
        {
            try
            {
                OrderStatusType type = new OrderStatusType
                {
                    Name = "Vyrizeno", 
                    CancelPermission = false, 
                    ChangePermission = false
                };
                context.OrderStatusTypes.Add(type);
                context.SaveChanges();
                Console.WriteLine("Pridano"); …
Run Code Online (Sandbox Code Playgroud)

.net c# database entity-framework-5

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