小编ana*_*lov的帖子

实体框架CTP 4."无法将值NULL插入列" - 即使没有NULL值

我正在使用EF CTP 4.我有一个简单的控制台应用程序(用于测试目的),它使用EF将一些数据插入SQL数据库.

我在插入物品时遇到了问题

using(var context = GetContext())
{
   BOB b = new BOB();
   b.Id = 1;

   context.Bobs.Add(b);
   context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

它抛出错误:{"无法将值NULL插入列'Id',表'TestDB.dbo.BOB';列不允许空值.INSERT失败.\ r \n语句已终止."}

该表只有1个Id int NOT NULL字段,它是主键,不是自动递增的Id.

在创建DataContext时,我有这个配置,肯定会被触发.

protected override void OnModelCreating(ModelBuilder builder)
{
    builder.Entity<BOB>().HasKey(b => b.Id);
    builder.Entity<BOB>().MapSingleType().ToTable("BOB");
}
Run Code Online (Sandbox Code Playgroud)

我还预先填充了这个表,然后通过调试器能够通过监视加载这个BOB对象...所以我真的很难过,因为能够加载我的BOB显示一切都是正确的...但是插入一个新的崩溃...

c# entity-framework ctp4

53
推荐指数
4
解决办法
4万
查看次数

在SQL Server中,如何在任何位置引用列?

在我相当大的数据库中,我想知道在整个模式(SP,函数,表,触发器......)中引用列的所有地方.我不想只进行文本搜索,因为这将获取注释,并且还会从其他表中找到类似命名的列.

有谁知道我是否可以这样做?我使用SQL Server 2008.

sql-server sql-server-2008

36
推荐指数
4
解决办法
6万
查看次数

如何在MSSQL中更改所有表,视图和存储过程的模式

最近我们在数据库服务器上遇到了问题,经过长时间的努力,决定更改数据库服务器.因此,我们设法在另一台服务器上恢复数据库,更改连接字符串等.在我们尝试从Web浏览器访问网站之前,一切都按计划进行.

我们开始收到有关未找到数据库对象的错误.后来我们发现它是由于修改后的模式名称而发生的.由于Kentico数据库中有数百个数据库对象(表,视图和存储过程),因此无法一个接一个地手动更改所有这些对象.有这样做的实用方法吗?

sql database-migration kentico sql-server-2008 database-schema

24
推荐指数
4
解决办法
7万
查看次数

在处理时,没有变量的using语句会做什么?

我一直习惯使用变量和赋值.现在我喜欢这个类DbProviderConnection:

public class DbProviderConnection : IDisposable
{
    public DbConnection Connection { get; set; }
    public DbTransaction Transaction { get; set; }

    public DbTransaction BeginTransaction()
    {
        Transaction = Connection.BeginTransaction();
        return Transaction;
    } 

    //... and so on
}
Run Code Online (Sandbox Code Playgroud)

现在我想像这样使用它:

using (DbProviderConnection cnctn = _planDb.CreateOpenConnection())
{
    using (cnctn.BeginTransaction())
    {
        //...
        cnctn.Transaction.Commit();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:DbProviderConnection.Transaction.Dispose被叫吗?

c# transactions using-statement

22
推荐指数
2
解决办法
4933
查看次数

实体框架:StoreGeneratedPattern ="Computed"属性

我有一个DateTime房产.我需要这个属性的默认值DateTime.Now.然后我发现您可以指定一个属性StoreGeneratedPattern="Computed"并将其设置为(getdate())SQL.这成功了.但我无法在代码中更改此属性.有时我需要将此属性更改为任何DateTime值.但是我的更改没有保存.

c# entity-framework sql-server-2005 ado.net-entity-data-model

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

实体框架中多个"包含"的最佳实践是什么?

假设我们在数据模型中有四个实体:Categories,Books,Authors和BookPages.还假设Categories-Books,Books-Authors和Books-BookPages关系是一对多的.

如果从数据库中检索类别实体实例 - 包括"Books","Books.BookPages"和"Books.Authors" - 这将成为一个严重的性能问题.而且,不包括它们将导致"对象引用未设置为对象的实例"异常.

使用多个Include方法调用的最佳做法是什么?

  • 写一个方法GetCategoryById并包含所有项目(性能问题)
  • 写一个方法GetCategoryById并发送一个包含的关系列表(可能,但似乎还不够优雅)
  • 编写方法,如GetCategoryByIdWithBooks,GetCategoryByIdWithBooksAndBooksPages和GetCategoryByIdWithBooksAndAuthors(不实用)

编辑:通过第二个选项我的意思是这样的:

public static Category GetCategoryById(ModelEntities db, int categoryId, params string[] includeFields)
{
    var categories = db.Categories;

    foreach (string includeField in includeFields)
    {
        categories = categories.Include(includeField);
    }

    return categories.SingleOrDefault(i => i.CategoryId == categoryId);
}
Run Code Online (Sandbox Code Playgroud)

在调用时我们需要这样的代码:

Category theCategory1 = CategoryHelper.GetCategoryById(db, 5, "Books");
Category theCategory2 = CategoryHelper.GetCategoryById(db, 5, "Books", "Books.Pages");
Category theCategory3 = CategoryHelper.GetCategoryById(db, 5, "Books", "Books.Authors");
Category theCategory4 = CategoryHelper.GetCategoryById(db, 5, "Books", "Books.Pages", "Books.Authors");
Run Code Online (Sandbox Code Playgroud)

这种方法有任何明显的缺点吗?

c# architecture entity-framework data-access-layer ef-database-first

14
推荐指数
1
解决办法
6769
查看次数

为什么TimeSpan.ToString()需要转义分隔符?

您可以为DateTime对象指定自定义格式,如下所示:

DateTime.Now.ToString("HH:mm:ss");   // 19:55:23
Run Code Online (Sandbox Code Playgroud)

但是当我尝试对TimeSpan这样的对象使用相同的格式时:

DateTime.Now.TimeOfDay.ToString("HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)

我得到了"Input string was not in a correct format."例外.

事实证明,解决方案是你需要逃避':'像中的字符"HH\\:mm\\:ss".请注意,有一个双反斜杠,因为如果您只指定一个,它将破坏字符串,因此您也需要转义该字符串.

问题是,为什么.NET Framework开发人员会这样做?必须有一个合理的理由.为什么我们不能使用自定义格式说明符而不像我们可以使用DateTime对象那样转义它们?

寻找.NET专家来阐明这个主题.

c# datetime timespan

14
推荐指数
1
解决办法
1555
查看次数

它可以返回null吗?(this.Result == Result.OK)

这段代码可以返回null吗?

(this.Result == Result.OK)
Run Code Online (Sandbox Code Playgroud)

这行(或类似的行)可以返回除trueor 之外的任何内容false(例如null)吗?

c# null return

10
推荐指数
3
解决办法
1187
查看次数

为什么CAST('20140904 23:59:59.999'AS datetime)等于'2014-09-05 00:00:00.000'?

亲自尝试一下,也许它与我的环境有某种关系:

查询:

SELECT CAST('20140904 23:59:59.999' AS datetime)
Run Code Online (Sandbox Code Playgroud)

结果:

2014-09-05 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

请解释一下这种现象.

更新:Alex提到日期时间值四舍五入为.000,.003或.007秒的增量.问题是为什么?

sql-server datetime casting sql-server-2014

9
推荐指数
1
解决办法
961
查看次数

为什么 Microsoft.AspNetCore.Http.StatusCodes 没有设计为枚举?

为了学习软件设计的新知识,我经常分析.NET框架源代码。

在今天的学习过程中,Microsoft.AspNetCore.Http.StatusCodes当我看到该类不是作为枚举实现,而是作为带有public const int字段(甚至不是属性)的静态类实现时,引起了我的注意。

当它看起来是一个完美的解决方案时,为什么使用它enum来达到这个目的呢?这个设计决策背后的思考过程可能是什么?

我想我可能在这里遗漏了一些东西,我很乐意从这次经历中学到一些东西。

c# enums http-status-codes asp.net-core

8
推荐指数
1
解决办法
3145
查看次数