小编Jon*_*amy的帖子

我应该对用户定义的表类型有一个主键吗?

首先,我了解主键在SQL或与此相关的任何数据库中的表上的作用。

但是,当涉及到用户定义的表类型时,我发现自己无法理解为什么应该创建主键。根据我的经验,我发现它们并没有带来性能上的好处,但是我怀疑我的发现可能是由于我对它们的一般用法和有限的经验,而不是更有经验的观点。

例如,我通常将表值参数用于插入/更新过程,或传递用于创建选择查询的值数组。我发现它们没有任何性能优势,而且如果有任何表现,我会发现性能略有下降(但是我们最多只能说10毫秒,因此可以忽略不计)。

我应该透露,传递给它们的任何数据都已经非常仔细地清理/整理过,因此有可能因此而看不到收益,但是我无法轻易知道。

因此,问题又来了,我应该对用户定义的表类型使用主键,还是不那么重要?

抱歉,如果这是重复的。我进行了大量搜索,但随后可能使用了错误的关键字组合。

您的见解一如既往,将不胜感激。

database table-valued-parameters sql-server-2012

5
推荐指数
1
解决办法
1781
查看次数

使用Database-First时,将现有连接传递给DbContext构造函数时出错

我正在尝试创建一个类来执行数据库的工作,并且需要(或偏好)使用DbContext和良好的老式ADO的组合.为什么,EF非常适合简化大量代码,但ADO仍然有许多用于EF无法处理的更复杂方法的用途.

MSDN上的此链接声明我可以将现有的SqlConnection传递给我的上下文,如下所示:

using (var conn = new SqlConnection("..."))
{ 
    conn.Open();
    using (var context = new SampleContext(conn, contextOwnsConnection: false))
    {
    // Do Something
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我正在使用Database-First,因此这个构造函数不会显示为标准.因此,我创建了一个新的Partial Class文件并创建了相应的构造函数,如下所示:

public partial class MyEntities : DbContext
{
    public MyEntities(System.Data.Common.DbConnection conn, bool contextOwnsConnection = false)
        : base(existingConnection: conn, contextOwnsConnection: contextOwnsConnection)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我在遇到对新DbContext构造函数的调用时运行代码时,我的EDMX文件中的OnModelCreating抛出了以下UnintentionalCodeFirstException ()错误:

"如果在Code First模式下使用,则使用T4模板为Database First和Model First开发生成的代码可能无法正常工作.要继续使用Database First或Model First,请确保在执行应用程序的配置文件中指定了Entity Framework连接字符串.要使用从Database First或Model First生成的这些类,使用Code First添加任何其他配置,使用属性或DbModelBuilder API,然后删除引发此异常的代码."

我在这里遗漏了一些明显的东西,还是只是没有使用Database-First?

显然,我可以使用两个连接,一个用于我的SqlConnection对象,另一个用于我的DbContext对象,但如果可以的话,我自然希望尽可能使用单个连接.

任何和所有的帮助非常感谢.为了完整披露,我使用的是SQL-Server 2012,.NET 4.5.1,C#和EF6.0.2.

c# entity-framework entity-framework-6

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