当我将特定的存储过程拖到VS 2008 dbml设计器中时,它会显示返回类型设置为"none",并且它是只读的,因此我无法更改它.设计器代码将其显示为返回int,如果我手动更改它,它将在下一个构建时撤消.
但是使用另一个(几乎相同的)存储过程,我可以很好地改变返回类型(从"自动生成类型"到我想要的.)
我在两台独立的机器上遇到了这个问题.知道发生了什么事吗?
这是有效的存储过程:
USE [studio]
GO
/****** Object: StoredProcedure [dbo].[GetCourseAnnouncements] Script Date: 05/29/2009 09:44:51 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[GetCourseAnnouncements]
@course int
AS
SELECT * FROM Announcements WHERE Announcements.course = @course
RETURN
Run Code Online (Sandbox Code Playgroud)
而这个不是:
USE [studio]
GO
/****** Object: StoredProcedure [dbo].[GetCourseAssignments] Script Date: 05/29/2009 09:45:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[GetCourseAssignments]
@course int
AS
SELECT * FROM Assignments WHERE Assignments.course = @course ORDER BY date_due ASC …
Run Code Online (Sandbox Code Playgroud) 我正在尝试从C#应用程序对数据库存储过程进行简单调用.
这两者都具有相同的基本步骤.
但第3步不起作用.我有我的存储过程和设计器窗口,但我无法拖动sproc.我没有加号或"不允许"的标志.它只是一个不可拖动的对象.
我找不到另一种方法将我的sproc添加到.dbml文件中.我找不到有这个问题的其他人.每个消息来源都只是说要拖过来.
我在这里做错了什么?
截图:
我们有一个数据库,其中一个表包含可以是其他几个表的子记录.它有一个"软"外键,由所有者的Id和表名组成.这种(反)模式被称为"多态关联".我们知道它不是有史以来最好的数据库设计,我们会在适当的时候改变它,但不会在不久的将来改变它.让我举一个简化的例子:
两者Event
,Person
并Product
在评论中有记录.如您所见,没有严格的FK约束.
在实体框架可以通过sublassing支持这种模式Comment
进入EventComment
等,让Event
有EventComments
收集等:
从数据库生成基本模型后,手动添加子类和关联.OwnerCode
是这个TPH模型中的鉴别器.请注意Event
,Person
和Product
完全不同的实体.为它们建立一个公共基类是没有意义的.
这是数据库优先的.我们的现实模型就是这样,没问题.
好.现在我们想要转向代码优先.所以我开始将数据库逆向工程化为代码优先模型(EF Power Tools),然后继续创建子类并映射关联和继承.试图连接到Linqpad中的模型.那是麻烦开始的时候.
当尝试使用此模型执行查询时,它会抛出一个 InvalidOperationExeception
外键组件"OwnerId"不是"EventComment"类型的声明属性.验证它是否未从模型中明确排除,并且它是有效的原始属性.
当我有双向关联并被OwnerId
映射为属性时会发生这种情况Comment
.我的EventMap
class(EntityTypeConfiguration<Event>
)中的映射如下所示:
this.HasMany(x => x.Comments).WithRequired(c => c.Event)
.HasForeignKey(c => c.OwnerId);
Run Code Online (Sandbox Code Playgroud)
所以我尝试OwnerId
在模型中映射关联:
this.HasMany(x => x.Comments).WithRequired().Map(m => m.MapKey("OwnerId"));
Run Code Online (Sandbox Code Playgroud)
这引发了一个 MetaDataException
指定的架构无效.错误:(10,6):错误0019:类型中的每个属性名称必须是唯一的.已定义属性名称"OwnerId".(11,6):错误0019:类型中的每个属性名称必须是唯一的.已定义属性名称"OwnerId".
如果我删除三个实体注释关联中的两个,那就没关系,但当然这不是治愈方法.
更多细节:
EdmxWriter
)时,关联似乎在存储模型中,而在原始edmx中,它们是概念模型的一部分.那么,我该如何创建这个模型代码呢?我认为关键是如何指导代码优先映射概念模型中的关联,而不是存储模型.
c# foreign-keys ef-code-first ef-database-first entity-framework-5
我只是挑剔但我正在研究Entity Framework如何从EDMX文件生成DLL,我在msdn上看到了这个:
实体数据模型设计器(实体设计器)在设计时将模型和映射信息存储在.edmx文件中.在构建时,实体设计器使用.edmx文件中的信息来创建实体框架在运行时所需的.csdl,.ssdl和.msl文件.
我实际上发现奇怪的是它说"在构建时".csdl,.ssdl和.msl被创建,所以我决定测试.我知道这些文件是基于TablePerTypeStrategy.xaml流生成的,所以我将其删除并尝试构建我的应用程序.它成功了.
当我选择"从模型生成数据库"时,我确实收到一条错误消息,指出TablePerTypeStrategy.xaml文件丢失了.所以我很困惑,显然从这个测试开始,当我尝试生成数据库而不是构建应用程序时正在生成.
我在这里错过了什么?
c# entity-framework visual-studio-2010 ado.net-entity-data-model c#-4.0
我使用下面的代码从中获取一些项目IEnumerable
,但它始终将源返回为null并计为0并且实际上存在项目IEnumerable
private void GetItemsPrice(IEnumerable<Item> items, int customerNumber)
{
var a = items.Skip(2).Take(5);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试访问a
它时,它有数量0
.这里出了什么问题?
我有一个方法,将从sproc返回裸min结果以填充选择菜单.当我想要裸min结果时,我将bool getMin = true传递给sproc,当我想要完整记录时,我传递bool getMin = false.
这导致Entity FrameWork错误" 数据读取器与指定的不兼容 "
错误最相关的部分
{"Message":"发生错误.","ExceptionMessage":"数据读取器与指定的'CatalogModel.proc_GetFramingSystems_Result'不兼容.类型的成员'FrameType'在其中没有相应的列具有相同名称的数据读取器.","ExceptionType":"System.Data.EntityCommandExecutionException",
显然,错误告诉我,当数据读取器尝试设置不在查询结果中的属性"FrameType"时.
现在我理解了这个错误,我想知道的是,我正在为了将这个sql sproc拆分成两个sprocs而进行goning,还是有解决方法?
我的功能如下
public static IEnumerable<IFramingSystem> GetFramingSystems(int brandID, string frameType, string glazeMethod, bool getMin)
{
using (CatalogEntities db = new CatalogEntities())
{
return db.proc_GetFramingSystems(brandID, frameType, glazeMethod, getMin).ToList<IFramingSystem>();
};
}
Run Code Online (Sandbox Code Playgroud)
我的TSQL如下
ALTER proc [Catelog].[proc_GetFramingSystems]
@BrandID INT,
@FrameType VARCHAR(26),
@GlazeMethod VARCHAR(7) ='Inside',
@getMin BIT = 0
as
BEGIN
SET NOCOUNT ON;
IF @getMin =0
BEGIN
SELECT c.ID,c.Name,c.Descr,c.FrameType,c.isSubFrame,
c.GlassThickness,c.GlassPosition,c.GlazingMethod,c.SillProfile
from Catelog.Component c
WHERE c.MyType ='Frame'
AND c.FrameType = @FrameType …
Run Code Online (Sandbox Code Playgroud) 使用az cli
命令 ofaz keyvault secret show --name $SecretName --vault-name $KeyVaultName --query value)
返回带双引号的秘密。
这会导致我后续的 REST 调用失败。
如何仅返回秘密值,而不返回双引号?
我也尝试了该--outputs tsv
标志,但这返回了一堆值。根据文档,不保证顺序。
我的Linq to SQL DBML文件有一个奇怪的错误,当我保存它时,而不是保存到现有的设计器文件,创建一个重复的文件.
由于file.designer.cs和file1.designer.cs中的数据上下文构造函数之间存在歧义,因此这会导致整个错误.
有没有办法修复此错误,不涉及删除和重新创建dmbl文件.因为这个错误发生在我的所有DBML文件中,其中一些文件相当大.
上图显示了我遇到的问题.
我需要在HTML电子邮件中创建一个"转发给朋友"链接,该链接将模仿邮件客户端上的前进按钮(即启动带有预填充体的新窗口),这可能吗?
即:
<a href="forward-action">Forward this email to a friend</a>
如果没有,那么实现尽可能相似的结果的简单方法是什么?
PS.我知道这几乎是毫无意义的功能,这是客户的要求.
多态协会(PA)对于相对简单的数据库要求非常满意:让各种表在一个共享表中具有子记录.经典示例是具有注释记录的单个表,其适用于不同的不一定类似的实体.
在这个问题中, Mark做了很好的工作,展示了实现PA的三种常用方法.我想使用基表方法,Bill Karwin在同样优秀的答案中对此进行了更详细的描述.
一个具体的例子如下:
实体的主键引用基表中的相同键值,而注释表引用基表,因此可以观察到引用完整性.这里的关键部分是实体表的主键具有不同的域.它们是通过在基表中创建新记录并将其生成的密钥复制到实体的主键来生成的.
现在我的问题是:如果我想在具有生成自己的,相互重叠的主键的实体的现有数据库中引入具有引用完整性的PA,该怎么办?
到目前为止,我看到两个选项:
选项1:
每个实体都保留自己的主键,但也获得备用键.
喜欢:
不喜欢:
选项2:
每个实体在基表中都有自己的外键列.这看起来像Mark的多列方法.
喜欢:
不喜欢:
我倾向于选项1,可能在Base表中使用字段"EntityName"进行双向查找.哪个选项会更好.或者是另一种甚至更好的方法?
refactoring database-design polymorphic-associations sql-server-2008
c# ×5
linq-to-sql ×3
.net ×1
asp.net-3.5 ×1
azure ×1
azure-cli ×1
c#-4.0 ×1
email ×1
foreign-keys ×1
html ×1
linq ×1
refactoring ×1
skip ×1
sql-server ×1
t-sql ×1
take ×1