我正在尝试更新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) 我正在使用新的Entity-Framework 5,使用Spatial数据类型DbGeography作为我的模型的一部分,用于在一个实例中存储POINT,在另一个实例中存储POLYGON.
设置我的POLYGON的值时,所有保存都没有错误,但只有在按顺时针顺序在地图上绘制多边形时才会出现这种情况.如果我以逆时针方向绘制POLGON,我会得到sql级别的错误,表明数据是无效的地理类型.
在对问题进行自己的研究之后,它似乎源于地理数据类型在多边形环方向方面非常严格.最常见的解决方案似乎是将Polygon创建为几何体,然后将其转换为地理类型.
我正在寻找一种C#解决方案,可以在将数据发送到sql之前应用于数据.基本上会自动纠正坐标数组的环方向.
我已经尝试捕获错误,然后通过反转数组重建字符串.这在某些情况下有效,但首先它不可靠,其次捕获错误是一个很大的性能损失.
谢谢克里斯
我想确保我的数据库(SQL Server)更新是幂等的,功能类似于下面的博客文章,但使用实体框架(v5,数据库优先):
但是,如果我在插入过程中添加@Operation参数,我会得到
"错误2037:映射函数绑定指定函数...但不映射以下函数参数:操作"
(@Operation将是一个GUID,由应用程序生成,允许应用程序使用相同的GUID重试,如果它没有从proc获得成功响应.proc会将GUID写入日志表,并且只执行如果GUID不存在,则插入 - 从而确保幂等事务.)
有优雅的解决方案吗?
我在SQL中创建了一个DataBase并在Visual Studio 2012中创建了一个EDMX.它自动创建了POCO(TT)类.一切都很好看.
现在我更改表的列名.我更新了EDMX.用XML打开EDMX,一切看起来都很好.
在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)
这是一个错误还是我需要做些什么来解决这个问题?
我该怎么做才能避免这种情况?
此外,如果我更改任何SQL列的数据类型并从我的EDMX设计器中的DB更新模型,则不会更新概念模型.我该怎么做?
我一直在我的应用程序中成功使用EF 5 Code First.我有大约40张桌子.但是,我遇到了一个问题,我似乎可以让Migrations正确处理.所以,我想要做的是以某种方式告诉EF将数据库的当前模式视为一个新的起点,并从这一点开始管理它.这样,我可以手动进行必要的模式更改,然后告诉EF从这一点开始.
有没有办法可以做到这一点?我认为我将不得不删除__MigrationHistory表,或删除其内容.但我不确定如何最好地继续这样做.
entity-framework ef-code-first ef-migrations entity-framework-5
有没有办法让一个只读字段或一个没有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调用或其他方法来完成?
我在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?还有其他的解决方法吗?
请指教
提前致谢
西
嗨,我收到了这个错误
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
有没有办法确定打开的当前 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) 我正在开发一个 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# ×5
sql-server ×3
edmx ×2
c#-4.0 ×1
geography ×1
poco ×1
polygon ×1
spatial ×1
sql ×1
sqlgeography ×1