问题标签 [or-designer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 如何使用 Linq 连接不同数据库中的表?
我是一个 Linq 新手,我找不到任何文档来帮助我解决似乎是一个非常微不足道的问题 - 所以你的帮助将不胜感激!
我Table1
在数据库中有一个表,它在同一台服务器上DB1
有一个“伪”外键Table2ID
到Table2
数据库中的表。DB2
“伪”,因为显然我不能有一个跨越两个数据库的实际FK。
现在我在玩 O/R 设计器,我喜欢将数据库对象带入设计器时生成所有关系的方式……非常酷!我希望我的Table1
对象与 有关系Table2
,就像它与 中的所有“真实”外键相关对象有关系一样DB1
。但我不能带入Table2
我的数据库图,因为它在错误的数据库中。
为了综合这一点,我尝试在 中创建一个视图Table2
,DB1
这很简单select * from DB2..Table2
。啊哈,现在我可以将一个Table2
对象放入我的图表中。Table1
我什至可以在和之间建立父/子关系Table2
。但是当我查看生成的代码时,Table1
仍然与 没有任何关系Table2
,这让我感到最困惑。
我在某处错过了一步吗?有没有更好/推荐的方法来做到这一点?
谢谢!
之后...
按照一个人的建议,我尝试通过复制同一数据库中相关对象的所有结构来填充部分类,Table1
其中包含访问所需的所有方法。Table2
这实际上适用于读取,但是当我尝试更新或插入记录时,我得到了一个异常:
An attempt has been made to Attach or Add an entity that is not new, perhaps having been loaded from another DataContext. This is not supported.
所以看起来 Linq 的设计者实际上已经考虑过这种情况,并决定不允许连接不同数据库中的对象。真是可惜了……:(
……甚至后来……
感谢@williammandra.com,我发现您需要手动在视图上创建主键。但是还有另一个问题:由于某种原因,当您从视图中加载一个值Table2
并将其设置在新记录上Table1
,然后提交更改时,它会尝试将新记录插入Table2
,这显然会导致 PK 违规。知道为什么会发生这种情况,以及如何解决它吗?
c# - 使用反射来处理 Linqed 属性
我正在尝试编写一个通用方法,该方法将加载具有特定 ID 的特定类型的记录。这是一种有效的方法:
您可以忽略对LinqUtils.GetDataContext<T>()
;的调用 这是一个实用功能,我必须处理我的程序中有多个数据上下文的事实。关键是现在我可以将我的任何类声明为 的子类LinqableTable
,并且只需调用LinqedTable<MyType>.Get(ID)
.
然而,这有一些限制。首先,它强制我的所有表都有一个类型为 I 的身份字段long
,名为ID
。其次,因为我使用的是抽象方法,所以我不得不去 O/R 设计器,将系统中每个 ID 字段的继承属性更改为“覆盖”。
我想要更多的灵活性。所以很自然地,我尝试了反思,并得出以下结论:
从理论上讲,这允许我覆盖 ID 列名称,转换为long
任何整数数据类型都可以,并且我不需要将我的所有 ID 列定义为overrides
.
但
Linq 不喜欢这样。在调用q.Single<T>();
我得到一个运行时错误:
The member 'EISS.Utils.LinqableTable.IDValue' has no supported translation to SQL.
好的,今天我了解到 Linq 在后端做了某种魔术;它不会实例化obj
,只是读取IDValue
属性。所以一定有一些属性需要在IDValue
属性上设置,让 Linq 做它的事情。
但是什么?
c# - LinqToSQL 和审计更改的字段
这是 LinqToSQL 问题中的另一个问题,我确信我一定是错过了某个地方,因为 O/R 设计器的行为让我非常困惑……
我的 LinqToSQL 表有一个基类,我称之为LinqedTable
. 我已经成功地使用反射来获取后代类的所有属性并执行其他标准操作。
现在我想对我的表进行一些自动审计,以便每当LinqedTable
插入或删除记录或字段值更改时,我都会将记录插入到审计表中,详细说明更改类型、字段名称及其值保存前和保存后。
我想我可以使用PropertyChanging
事件来做到这一点,在保存之前跟踪所有更改的属性,然后在每次SubmitChanges()
调用后清除更改的集合。但是 - 出于某种奇怪的原因,从 O/R 设计器生成的代码没有在PropertyChanging
事件中为您提供属性名称 - 它发送一个空字符串!(为什么?!)它确实会在事件中发送属性名称PropertyChanged
,但这对我来说已经太迟了,无法获得原始值。
我想使用部分方法来获取所有属性的所有原始值OnLoaded()
- 但根据定义这是私有的,我需要在基类中访问该方法。即使我使用反射来获取该方法,这也意味着我必须为我的每个表实现另一半部分方法,这有点违背了继承的目的!
我也无法在 DataContext 中找到任何合适的方法来使用或覆盖。
那么,您会建议什么来使此审核功能正常工作?
c# - 我的 O/R Designer 不断删除 Designer.cs 文件!
我有一个奇怪的问题,有时当我使用 O/R 设计器(通常通过添加我在数据库中添加的字段)对 Linq 对象进行更改时,当我保存项目时,designer.cs 文件得到删除!
幸运的是,我可以依靠源代码控制;我取消删除文件并取消对 csproj 文件的更改。但这真的很烦人,而且似乎没有任何充分的理由(我的项目包含大约 100 个对象这一事实并不是借口)。
有没有其他人遇到过这个问题?知道什么可能导致这种情况发生吗?
编辑- 附加信息 - 我的 DataContext 类设置有自定义基类。D'ya认为这可能与它有关......?
c# - 如何使用 LinqToSql 将字符串值隐式转换为枚举?
我问了一个关于使用 LinqToSql 在表上映射枚举值的问题,答案是使用 O/R 设计器将类型设置为 global::MyNamespace.TMyEnum。
如果您的枚举基于整数,那可以正常工作。但是如果你的枚举是基于一个字符串值呢?最明显的应用是:
其中数据库上的等效值为M
,F
和U
。您不能将枚举键入为字符串,那么如何使Gender
LinqToSql 对象的属性返回TGender
值呢?
c# - 如何关联不同 dbml 图上的 Linq-To-Sql 对象?
我有两个不同的 dbml 图反映了我的 Linq-To-SQL 类。(这是必要的,因为它们出现在不同的项目中。)一个图中的一个对象需要与另一个图中的对象关联。
我该怎么做?
c# - 如何按字母顺序对 DBML 对象进行排序?
我的项目中有一个包含所有 LinqToSql 对象的 DBML 文件。最初我从数据库中导入它们,一切都很好。现在随着我的数据库不断增长,我一直在 O/R 设计器中将新表添加到图表中,但它们总是被附加到 XML 的末尾。这有点麻烦,因为当我定义外键时,它总是按照它们在 XML 中出现的顺序列出可用表。
任何想法如何根据表名按字母顺序对 XML 表声明进行排序?
c# - 实现接口的 LINQ to SQL 类
我正在使用 LINQ to SQL (O/R) 设计器为应用程序设计数据模型,并且想知道:是否可以让(许多)类实现接口或基类并将实现的字段值存储在数据库中?
我的大多数类(如果不是全部的话)都需要存储描述对象元数据的公共字段,例如对象的创建时间和创建者、对象是否被删除以及上次修改的时间......这些字段的值理想情况下,只需进入数据库中实现类表的列。
我知道在 .dbml 文件中指定全局基类或接口的选项,但这不是很优雅,因为我将有一些不实现接口的 L2S 类。
我知道使用 NHibernate 之类的东西很容易做到这一点。我只是想看看是否有办法用 LINQ to SQL 以一种优雅的方式做到这一点。
任何指针?
c# - 如何访问相关记录的属性?(O/R 设计器生成的实体)
我是 Linq-SQL 的新手,使用 O/R 设计器生成我的数据类。
我的主数据表有几个 1:M(子-父)关系,这些关联已在设计器中设置。
我想要做的是:
关联的“属性”窗格包含作为子属性名称的表名(复数形式),但设计器生成的父类没有子项(甚至“子项”)的集合。
我在其他地方读到过,最好让设计者继续使用它(例如参见关于这个问题的评论),但是自动生成的代码似乎并没有给我我需要的东西。
我如何告诉设计师创建必要的集合属性?或者,我将如何手动进行?
visual-studio - 如何向 Linq2SQL DBML 文件添加额外的程序集引用?
我有一个 DBML 文件,我在其中使用 IPAddress 类 (System.Net) 来映射数据库中的字段。然而,我没有找到让 DBML 设计者记住它应该在生成的代码中添加“使用 System.Net”的方法。手动添加它直到我下次保存文件。有没有办法指定额外的程序集?我认为指定,就像它已经为预定义的类型所做的那样,会起作用(就像在“字符串(System.String)”中一样,但这只会把它弄乱,因为它会插入字面上的“IPAddress(System.Net.IPAddress)”作为类型.
那么,如何将非标准类型输入 O/R 设计器,以便我也可以编辑它们?