标签: entity-framework-5

当键在基类中时,EF迁移DropForeignKey失败

我正在尝试更新EF 5.0.0-rc代码优先类库的数据模型.Up()方法中的第一个命令是

DropForeignKey("dbo.ChileInventory", new[] { "LotInventoryItemTypeId", "ChileProductId" }, "dbo.ChileProducts");
Run Code Online (Sandbox Code Playgroud)

但我得到一个SqlException:'FK_dbo.ChileInventory_dbo.ChileProducts_LotInventoryItemTypeId_ChileProductId'不是约束.无法删除约束.

我认为错误的原因是因为我的ChileProducts类从它的基类得到了它的关键属性.由于DropForeignkey方法没有接受主列名称的重载,我相信EF无法确定要删除的正确约束.我还应该指出,异常消息中显示的约束名称与数据库中的约束名称不匹配(因此错误...)

您可以在下面找到数据模型和迁移方法.但首先要快速了解迁移背后的变化性质:InventoryBase类的每个衍生产品都通过InventoryTypeId和[InventoryTypeSpecific] ProductId的组合键定义产品类型.例如,ChileInventory会将其特定的智能类型类型识别为InventoryItemTypeId = [ChileInventoryTypeId]和ChileProductId = [ChileProductId].PackagingInventory会将其包装类型标识为InventoryItemTypeId = [PackagingInventoryTypeId]和PackagingProductId = [PackagingProductId].等等.

我正在努力推出的模型更改是将[InventoryTypeSpecific] ProductId从每个InventoryBase衍生产品升级到基础.这将导致所有InventoryBase派生对象共享一个公共ProductId属性,该属性与InventoryItemTypeId一起将启用从InventoryBase到ProductBase的导航; 这在以前的型号中是不可能的.

在此先感谢您的建议和考虑.--Vinney

数据模型

智利产品

public abstract class ProductBase
{
    [Key]
    [Column(Order = 0)]
    public virtual int InventoryItemTypeId { get; set; }

    [Key]
    [Column(Order = 1)]
    public virtual int Id { get; set; }

    [StringLength(150)]
    public virtual string Name { get; set; }

    [ForeignKey("InventoryItemTypeId")]
    public virtual InventoryItemType InventoryItemType { get; set; }

    public virtual bool IsActive { get; …
Run Code Online (Sandbox Code Playgroud)

ef-migrations entity-framework-5

6
推荐指数
2
解决办法
5965
查看次数

如何使用C#Entity Framework 5 DbGeography空间数据校正多边形环方向

我正在使用新的Entity-Framework 5,使用Spatial数据类型DbGeography作为我的模型的一部分,用于在一个实例中存储POINT,在另一个实例中存储POLYGON.

设置我的POLYGON的值时,所有保存都没有错误,但只有在按顺时针顺序在地图上绘制多边形时才会出现这种情况.如果我以逆时针方向绘制POLGON,我会得到sql级别的错误,表明数据是无效的地理类型.

在对问题进行自己的研究之后,它似乎源于地理数据类型在多边形环方向方面非常严格.最常见的解决方案似乎是将Polygon创建为几何体,然后将其转换为地理类型.

我正在寻找一种C#解决方案,可以在将数据发送到sql之前应用于数据.基本上会自动纠正坐标数组的环方向.

我已经尝试捕获错误,然后通过反转数组重建字符串.这在某些情况下有效,但首先它不可靠,其次捕获错误是一个很大的性能损失.

谢谢克里斯

geography polygon spatial sqlgeography entity-framework-5

6
推荐指数
1
解决办法
3527
查看次数

如何确保使用Entity Framework 5插入幂等数据库?

我想确保我的数据库(SQL Server)更新是幂等的,功能类似于下面的博客文章,但使用实体框架(v5,数据库优先):

http://blogs.msdn.com/b/adonet/archive/2013/03/11/sql-database-connectivity-and-the-idempotency-issue.aspx

但是,如果我在插入过程中添加@Operation参数,我会得到

"错误2037:映射函数绑定指定函数...但不映射以下函数参数:操作"

(@Operation将是一个GUID,由应用程序生成,允许应用程序使用相同的GUID重试,如果它没有从proc获得成功响应.proc会将GUID写入日志表,并且只执行如果GUID不存在,则插入 - 从而确保幂等事务.)

有优雅的解决方案吗?

c# entity-framework-5 azure-sql-database

6
推荐指数
1
解决办法
1372
查看次数

EF中的POCO类未按预期工作

我在SQL中创建了一个DataBase并在Visual Studio 2012中创建了一个EDMX.它自动创建了POCO(TT)类.一切都很好看.

现在我更改表的列名.我更新了EDMX.用XML打开EDMX,一切看起来都很好.

问题1

在TT中运行自定义工具后,我看到另外创建了一个新属性,例如:

SQL table name : Student

Column name : sName
Run Code Online (Sandbox Code Playgroud)

在我的POCO课程中

public int sName{ get; set; }
Run Code Online (Sandbox Code Playgroud)

自动创建.

现在我将SQL中的列名更改为

Column name : studentName
Run Code Online (Sandbox Code Playgroud)

我的POCO课程

public int sName{ get; set; }

public int studentName{ get; set; }
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是我需要做些什么来解决这个问题?

我该怎么做才能避免这种情况?

问题2

此外,如果我更改任何SQL列的数据类型并从我的EDMX设计器中的DB更新模型,则不会更新概念模型.我该怎么做?

poco edmx entity-framework-5 visual-studio-2012

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

实体框架5代码优先 - 如何"重新开始"?

我一直在我的应用程序中成功使用EF 5 Code First.我有大约40张桌子.但是,我遇到了一个问题,我似乎可以让Migrations正确处理.所以,我想要做的是以某种方式告诉EF将数据库的当前模式视为一个新的起点,并从这一点开始管理它.这样,我可以手动进行必要的模式更改,然后告诉EF从这一点开始.

有没有办法可以做到这一点?我认为我将不得不删除__MigrationHistory表,或删除其内容.但我不确定如何最好地继续这样做.

entity-framework ef-code-first ef-migrations entity-framework-5

6
推荐指数
1
解决办法
1605
查看次数

只读字段或属性

有没有办法让一个只读字段或一个没有setter映射的属性到一个具有Entity Framework Code First的数据库列?

我发现两者都被忽略了,例如:

using System;

namespace App.Model
{
    public class Person
    {
        string _address1; // Private Field to back the Address Property

        public string Address1 // Public Property without a Setter
        {
            get { return _address1; }
        }


         public readonly string Address2; // Public Read Only Field
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有Fluent API调用或其他方法来完成?

c# entity-framework ef-code-first entity-framework-5

6
推荐指数
1
解决办法
3035
查看次数

不带MS DTC的同一服务器上的多个数据库(datacontext)

我在SQL Server 2008上使用EF5.0.我在同一个服务器实例上有两个数据库.我需要更新两个数据库上的表,并希望它们是同一个事务.所以我使用了TransactionScope.以下是代码 -

public void Save()
{
        var MSObjectContext = ((IObjectContextAdapter)MSDataContext).ObjectContext;
        var AWObjectContext = ((IObjectContextAdapter)AwContext).ObjectContext;

        using (var scope = new TransactionScope(TransactionScopeOption.Required,
                                             new TransactionOptions
                                                 {
                                                     IsolationLevel = IsolationLevel.ReadUncommitted
                                                 }))
        {               
            MSObjectContext.SaveChanges(SaveOptions.DetectChangesBeforeSave);
            AWObjectContext.SaveChanges(SaveOptions.DetectChangesBeforeSave);

            scope.Complete();
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我使用上面的代码时,事务被提升为DTC.在互联网上搜索后,我发现这是因为两个不同的连接串/连接.但我不明白的是,如果我在一个数据库上编写存储过程,该数据库更新不同数据库中的表(在同一服务器上),则不需要DTC.那么为什么EF或TransactionScope会将其推广到DTC?还有其他的解决方法吗?

请指教

提前致谢

西

transactionscope c#-4.0 entity-framework-5

6
推荐指数
1
解决办法
1913
查看次数

INSERT语句与FOREIGN KEY约束错误冲突

嗨,我收到了这个错误

INSERT语句与FOREIGN KEY约束"FK_dbo.AspNetUsers_dbo.Contacts_ContactID"冲突.

冲突发生在数据库"aspnet-COGMakati-20140119015553",表"dbo.Contacts",列'ContactID'中.

该语句已终止.

我正在使用Entity Framework和MVC 5的IdentityUser,所以我真的迷失了我正在做的事情:

这就是我想要填充的内容:

public class User : IdentityUser
{
    [Required]
    [Display(Name = "First Name")]
    public string FirstName { get; set; }

    [Required]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }

    [Required]
    public string Email { get; set; }

    public string Birthday { get; set; }
    [Display(Name = "Referred By")]
    public string LifegroupPreference { get; set; }
    [Display(Name = "Civil Status")]
    public string CivilStatus { get; set; }

    public int EducationID { …
Run Code Online (Sandbox Code Playgroud)

c# sql-server entity-framework-5 asp.net-mvc-5 asp.net-identity

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

如何从实体框架 DbContext 收集当前的 SQL Server 会话 ID?

有没有办法确定打开的当前 SQL Server 会话 ID ( @@SPID),而不是DbContext直接对数据库进行 SQL 查询?

如果有,是否有任何保证 SQL Server 会话 ID 将保持不变,直到DbContext被释放并且其连接被释放回实体框架连接池?类似的东西:

using (MyEntities db = new MyEntities()) {

    // the following 3 pieces of code are not existing properties and will result in compilation errors
    // I'm just looking for something similar to the following 3 lines
    db.CurrentSessionId; //error
    db.Database.CurrentSessionId; //error
    ((IObjectContextAdapter)db).ObjectContext.Connection.CurrentSessionId; //error

    // the following code will work, but will this session id be the same until the original DbContext …
Run Code Online (Sandbox Code Playgroud)

c# sql sql-server entity-framework entity-framework-5

6
推荐指数
1
解决办法
4253
查看次数

为什么实体框架将名为“People”的表映射为我的 .edmx 文件中名为“Person”的实体

我正在开发一个 asp.net mvc-4 web 应用程序,我正在使用 Entity Framework 5.0 。现在我已经使用实体框架和数据库优先方法映射了我的 sql server 2008 表。但是在完成映射后我遇到了这个奇怪的问题,现在在我的数据库中,我有一个名为“”的表,如下所示:-

在此处输入图片说明

但是在生成的 edmx 文件中,该表被重命名为 "Person" ,这是实体在我的 edmx 文件中的样子:-

在此处输入图片说明

这是生成的模型类:-

    using System;
    using System.Collections.Generic;

    public partial class Person
    {
        public long CIID { get; set; }
        public string ATTRIBUTE_1202 { get; set; }

        public virtual BaseElement BaseElement { get; set; }
        public virtual Requester Requester { get; set; }
        public virtual Technician Technician { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

那么任何人都可以提出为什么“People”表在 .edmx 文件中显示为名为“Person”的实体?

c# sql-server entity-framework edmx entity-framework-5

6
推荐指数
1
解决办法
1449
查看次数