实体框架通过主键获取实体
前一段时间,我想实现一种能够确定给定实体的插入或更新的方法,因此我不必揭示"插入"和"更新"方法,而只是一个简单的" insertorupdate". 代码的一部分发现实体是否是新的,是: public virtual T GetEntityByPrimaryKey(T entity) where T : class { var entityType = entity.GetType(); var objectSet = ((IObjectContextAdapter)this.DatabaseContext).ObjectContext.CreateObjectSet(); var keyNames = objectSet.EntitySet.ElementType.KeyMembers.Select(edmMember => edmMember.Name); var keyValu
34 2024-04-26
编程技术问答社区
MySql Last_Insert_Id()的并发问题...(C#)。
我不确定为什么以下控制台应用程序不会产生last_insert_id()的预期行为.我已经读到,last_insert_id()返回特定连接的最后一个自动incremented值,但是在此代码中,两个连接都返回相同的结果.有人可以解释我出了什么问题吗? static void Main(string[] args) { string ConnectionString = "server=XXXX;database=XXXX;username=XXXX;password=XXXX;pooling=true;max pool size=100;min pool size=0"; MySqlConnection conn1 = new MySqlConnection(ConnectionString); MySqlConnection conn2 = new MySqlConnection(ConnectionString
10 2024-04-26
编程技术问答社区
使用Entity Framework代码首先保存分离的对象图,导致主键违规
我正在尝试使用代码First Fluent符号保存我已映射到EF6的Pocos的对象图. 保存对象图后,我偶然发现了主要键违规例外. 对象图很简单: 一个Issue可以包含多个WorkItems,每个> Author(as User). 这些对象是外部填充的(使用Web API) 当我试图用两个涉及同一作者的工作源来保存问题时,我希望插入该问题,插入工作词并插入一个作者,另一个作者将被引用或被引用或被引用或更新. 然而,发生的问题是插入了问题,插入了工作词,并插入了对同一用户的两个引用,从而导致主要密钥违规. 简化的问题对象: public class Issue { public Issue() { WorkItems = new List(); } public string Id { get; set; } private List _
10 2024-04-23
编程技术问答社区
多对多关系更新:不能插入重复的键
我仍然是EF代码的新手,所以请与我同意. 我有这些实体类: public class User { public int UserId { get; set; } public string UserName { get; set; } public string EmailAddress { get; set; } public string Password { get; set; } public virtual ICollection Tasks { get; set; } public virtual ICollection TaskAssignees { get; set; } public User() { Tasks = new List();
6 2024-04-21
编程技术问答社区
如何在Entity Framework代码第一数据库中手动设置实体主键?
好吧,我有以下模型结构:我有一个类 - DatabaseEntity,基本上是 public class DatabaseEntity { public int Id { get; set; } } 因此,每个实体(例如产品,类别等)都将继承DatabaseEntity并具有Id属性.另外,我使用InsertOrUpdate方法的典型EntityFramework存储库类: private readonly DbContext _database; public void InsertOrUpdate(TObject entity) where TObject : DatabaseEntity { if(entity.Id == default(int)) { // New entity DbSet().Add(entity); } else {
20 2024-04-19
编程技术问答社区
如何在C#中获得Ms Access表的主键
我需要构成Microsoft Access表的主要键的字段或字段(只是字段的名称),给定连接和表格. 解决方案 好吧,我想我找到了它.它应该适用于所有OLEDB,并且是STH.喜欢: public static List getKeyNames(String tableName, DbConnection conn) { var returnList = new List(); DataTable mySchema = (conn as OleDbConnection). GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys, new Object[] {null, null, tableName}); // following is a lengt
10 2024-04-17
编程技术问答社区
数据库主键的C#映射-字符串或int
在Northwind Starters套件中,数据库中的主要键映射到C#中的字符串. 这是好习惯吗?如果是这样,为什么? thx,lieven cardoen ps:抱歉,也许是错误的问题... 在Northwind启动器套件中,某些表具有带有DataType INT的自动燃料主键,而其他表则具有非自动燃料主键,并带有DataType NCHAR(5).为什么是这样? 好吧,显然有些主要键只是代码(NCHAR(5)格式).很抱歉使用您的时间. 我以为数据类型INT映射到C#字符串,这对我来说似乎是非常错误的(但事实并非如此). 解决方案 为了纯效率,仅由于支持在机器代码级别上比较INT的支持,因此最好使用INT作为主键.使用在数据库级别实现的算法比较字符串.除非您的字符串很短,否则整数键也将在页面上占用更少的空间(DB页面). 更新:基于董事会上的另一个答案,我不确定是否正确理解了您的问题.您是否在问将整数用作琴键(可以选择的地方)是否更好?还
16 2024-04-16
编程技术问答社区
复杂类型需要主键
我有一个包含一个属性的对象,该属性具有另一个对象的类型,我想将其视为复杂类型. public class Location : IModule { public string Id { get; set; } public Coordinate Coordinate { get; set; } } [ComplexType] public class Coordinate { public string Latitude { get; set; } public string Longitude { get; set; } } 添加迁移时,我遇到了一个问题,即需要一个主键(正是我要预防的). 实体类型Coordinate需要定义一个主键. 编辑 出于性能原因,我希望将属性存储为Coordinate_Latitude和Coordinate_Longitute,而不是对另一个表的引用. 解决方案 基于此问题(我如何在实体框
10 2024-04-16
编程技术问答社区
在C#和iText 7中用x509Certificate2创建IExternalSignature
我正在使用C#项目中使用数字证书或智能卡(X509Certificate2)测试ITEXT 7.1.2.0库来签署PDF文件.但是,当我尝试创建iexternalsignature时,我会遇到此错误. According to the documentation found (here,这里和在这里a>),实现此过程的方法是使用允许从数字证书中提取主要键的Bouncycastle库,但是,它给了我一个错误,我找不到其他方法. 在文档中(在这里)它们是由.pfx文件创建的,但是在这种情况下,我需要直接从卡片读取器中的证书中获取主键.在Itext的先前版本中,它允许使用以下命令创建: IExternalSignature externalSignature = new X509Certificate2Signature(Certificate, "SHA-1"); 但是在版本7中,它不再可用,在文档中,我看不到该怎么做. 有人使用了Itext 7,并且能够使用X509C
4 2024-04-12
编程技术问答社区
附加一个类型的实体失败,因为另一个相同类型的实体已经有相同的主键值。
让我快速描述我的问题. 我有5个客户的 5个数据库 每个都有一个称为SubnetSettings 的表. 我已经创建了一个下拉列表来选择一个客户,并将显示属于选定客户的子网格表,并允许我创建,编辑和删除. 我可以创建,删除毫无问题,但是当我想编辑数据时,它带来了错误: "/tms"应用中的服务器错误. 附加'cfs.domain.entities.subnetsettings'的实体失败,因为同一类型的另一个实体已经具有相同的主要键值.如果使用"附加"方法或将实体的状态设置为"不变"或"修改",则可能会发生这种情况,如果图中的任何实体都具有冲突的键值.这可能是因为某些实体是新的,尚未收到数据库生成的关键值.在这种情况下,请使用"添加"方法或"添加"实体状态跟踪图形,然后将非新实体的状态设置为"不变"或"修改". 这是我在控制器中的编辑 // GET: /SubnetSettings/Edit1/5 public Action
16 2024-04-12
编程技术问答社区
在Entity Framework中添加具有多对多关系的项目
当我尝试添加具有多一关系的项目时,我会遇到主要键违规错误: 我有两个类 - 具有多一关系的文章和标签: public class Article { public int ID { get; set; } public string Text { get; set; } public ICollection Tags { get; set; } } public class Tag { [Key] public string UrlSlug { get; set; } public string Name { get; set; } public ICollection Articles{ get; set; } } 当我添加新文章时,我允许用户输入任何标签,然后如果在数据库中尚未创建标签,则要创建一个新标签标签已经存在. 因此,当我创建新文章对象时,我称为以下功能:
10 2024-04-12
编程技术问答社区
实体框架4:如何找到主键?
我正在尝试使用EF4创建一个通用方法来找到对象的主要键. 示例 public string GetPrimaryKey() { ... } 为了提供更多信息,我正在使用Tekpub Starterkit及以下是我试图启动和运行的课程 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Objects; using System.Data.Objects.ELinq; using System.Data.Linq; using Web.Infrastructure.Storage.EF4; namespace Web.Infrastructure.Storage { public class EFSession:ISession { PuzzleEntities _db;//This is a
4 2024-04-11
编程技术问答社区
无法更新EntitySet-因为它有一个DefiningQuery并且没有<UpdateFunction>元素存在。
我正在使用.NET 3.5. 使用实体框架1 我正在做这样简单的事情: var roomDetails = context.Rooms.ToList(); foreach (var room in roomDetails) { room.LastUpdated = DateTime.Now; } 我尝试这样做时会遇到此错误: context.SaveChanges(); 我得到错误: 无法更新EntitySet - 因为它具有deporingQuery,并且在 element中存在元素以支持当前操作. 我正在对上下文进行许多更新,但没有任何问题,只有当我尝试更新此特定实体时. 我所有的搜索都显示出同一件事,即我要更新的实体上没有主键声明.但是,a,我确实有一个主键... 解决方案 通常是因为以下原因之一: 实体集由数据库视图映射 自定义数据库查询 数据库表没有主键 这样做之后,您可能仍需要在"实体
14 2024-04-10
编程技术问答社区
Django BigInteger自动递增字段作为主键?
我目前正在建立一个涉及大量集体智能的项目.每个访问网站的用户都会创建一个唯一的配置文件,并且他们的数据后来用于计算自己和其他用户的最佳匹配. 默认情况下,Django创建一个INT(11)id字段来处理模型主键.我关心的是很快溢出(即,〜2.4b设备访问页面而没有事先设置的cookie).我如何将其更改为在django内部的mysql和long()中表示为bigint? 我发现我可以做以下( http:///Docs.djangoproject.com/en/dev/ref/models/fields/#bigintegerfield ): class MyProfile(models.Model): id = BigIntegerField(primary_key=True) 但是,是否有一种方法可以使其自动插入,例如通常的id字段?另外,我可以毫不签名,以便我有更多的空间来填写? 谢谢! 解决方案 由于django 3.2隐式主键的类型可以
16 2024-03-30
编程技术问答社区
Azure表存储的自动增量
我目前正在开发用于Azure表存储的应用程序.在该应用程序中,我的表格将相对较少(每天几千),这些实体的主要键将在另一个表中使用,该表将有数十亿行. 因此,我正在寻找一种使用自动插入整数而不是GUID作为小表中的主要键的方法(因为它可以节省大量的存储空间和插入的可扩展性并不是一个问题). 关于该主题的讨论,例如在但是,由于并发问题确实很难进行调试和斑点,因此我自己实施此问题有些不舒服.因此,我的问题是是否有经过良好测试的推动? 解决方案 我尚未实施此功能,但正在努力... 您可以使用您的下一个ID播种队列,然后在需要时从队列中摘下它们. 您需要保留一个表格才能包含添加到队列中最大数字的值.如果您知道自己不会使用大量整数,那么您可能会有一个工人经常醒来,并确保队列中仍然有整数.您也可以有一个二手int排队,工人可以检查以密切注意使用. 您也可以将该工人挂钩,因此,如果当您的代码需要ID(偶然)时,队列是空的,它可能会使工人的午睡中的小睡中断以尽快创建更
8 2024-03-26
编程技术问答社区
Azure SQL数据库中的主键
我正在研究使用CQRS和DDD原理的分布式系统.基于此,我认为我的实体的主要密钥应该是GUID,这是由我的域(而不是数据库)生成的. 我一直在阅读有关GUIDS作为主要键的信息.但是,如果应用于Azure SQL数据库,似乎有些最佳实践不再有效. 顺序指导如果您使用前提SQL Server计算机,那么生成的顺序指导将始终是唯一的.但是,在Azure上,情况不再如此.如 类型GUID列是聚类的不良候选物.但是本文指出,在Azure上并非如此, 感谢您的任何见解! 解决方案 生成的顺序指南将始终是唯一的. 但是,在Azure上,不再是这种情况. 在此处查看这篇文章的底部 - http://blogs.msdn.com/b/sqlazure/archive/2010/05/05/05/10007304.aspx GUID的问题(依赖于NEWID())是它们将被随机分发,在将群集索引应用于它们时,它们会有性能问题. 我建议的是,您为主键使用GUID.
12 2024-03-26
编程技术问答社区
从AWS凭证提供商处获得安全令牌
有人可以解释我,我需要如何实现此 Blog ,hardcoded-aws-credentials-in-in-in-in-aws-iot-iot-iot-credentials-provider/" rel ="? 我在AWS文档中找不到它. 换句话说,我需要翻译一个命令: curl --cert eeb81a0eb6-certificate.pem.crt --key eeb81a0eb6-private.pem.key -H "x-amzn-iot-thingname: myThingName" --cacert AmazonRootCA1.pem https://.credentials.iot.us-west-2.amazonaws.com/role-aliases/MyAlias/credentials 到Java.我该怎么做?我需要AWS SDK(我更喜欢没有"自定义客户端提出HTTPS请求"的解决方案) 更新: 我试图使用自定义客
8 2024-03-22
编程技术问答社区
为什么我的自动递增主键中的数字被跳过?
使用MySQL 5.1.37 这并不是一个关键的问题,我们的一个Biz-dev人只是问了一下,我没有一个好的答案.在我们的用户表中,我们有一个自动插入主键.它会不时地跳过数字,并且似乎以越来越多的速度这样做.我最初的想法是,当出现两个并发注册并且一个无效时,如果在第一个失败时进行了第二个注册,则我们会看到跳过值,因为第二个注册将使用下一个ID.但这似乎并不可能是因为发生的频率.有什么想法吗? 解决方案 我认为您在正确的线路上,设置失败.这可能是交易"保留"主钥匙的结果,然后是交易后退.当然,这是假设没有在表上发出的删除语句 其他解决方案 以下答案以下答案: mysql auto_increment auto_increment不回滚
22 2024-03-20
编程技术问答社区
如何防止主序号主键被更新为不符合顺序的数字?
CREATE TABLE u_account ( Jid serial primary key, score int4 ); 当我这样更新时,主键正常工作(自身更新); INSERT INTO u_account ('score') VALUES ('122233344'); 但是,当我插入这样的值时; INSERT INTO u_account VALUES ('122233344'); 这将更新主键; 我不希望主要键接受除了应该来的数字以外的任何东西. 有人在我之前已经为我设置了它,以便我放入此代码; INSERT INTO u_account VALUES ('122233344'); 它会忽略主键,而只是更新分数. 请帮助. 解决方案 看起来您应该将表中两个字段的顺序撤向.然后,如果插入一个列值,它将覆盖"得分"字段,并使用主键序列序列为另一列生成值.这个示例可以做我认为您想要的: CREATE TABLE u_a
8 2024-03-20
编程技术问答社区
让一个ID的自动增量取决于另一个ID--可能吗?
我想为具有多个项目的项目服务器制作一个小型票务系统. 到目前为止 (TicketID, ProjectID) (1, 1) (2, 1) (3, 1) (4, 2) (5, 2) (6, 3) ,但我认为最好根据projectID来计算ticketID,例如: (TicketID, ProjectID) (1, 1) (2, 1) (3, 1) (1, 2) (2, 2) (1, 3) 在这里表: CREATE TABLE IF NOT EXISTS tickets ( TicketID INT UNSIGNED NOT NULL AUTO_INCREMENT, ProjectID INT UNSIGNED NOT NULL, ... PRIMARY KEY (TicketID, ProjectID) , FOREIGN KEY (ProjectID) REFERENCES projects (ProjectId)
10 2024-03-20
编程技术问答社区