我正在使用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显示一切都是正确的...但是插入一个新的崩溃...
在我相当大的数据库中,我想知道在整个模式(SP,函数,表,触发器......)中引用列的所有地方.我不想只进行文本搜索,因为这将获取注释,并且还会从其他表中找到类似命名的列.
有谁知道我是否可以这样做?我使用SQL Server 2008.
最近我们在数据库服务器上遇到了问题,经过长时间的努力,决定更改数据库服务器.因此,我们设法在另一台服务器上恢复数据库,更改连接字符串等.在我们尝试从Web浏览器访问网站之前,一切都按计划进行.
我们开始收到有关未找到数据库对象的错误.后来我们发现它是由于修改后的模式名称而发生的.由于Kentico数据库中有数百个数据库对象(表,视图和存储过程),因此无法一个接一个地手动更改所有这些对象.有这样做的实用方法吗?
sql database-migration kentico sql-server-2008 database-schema
我一直习惯使用变量和赋值.现在我喜欢这个类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被叫吗?
我有一个DateTime房产.我需要这个属性的默认值DateTime.Now.然后我发现您可以指定一个属性StoreGeneratedPattern="Computed"并将其设置为(getdate())SQL.这成功了.但我无法在代码中更改此属性.有时我需要将此属性更改为任何DateTime值.但是我的更改没有保存.
c# entity-framework sql-server-2005 ado.net-entity-data-model
假设我们在数据模型中有四个实体:Categories,Books,Authors和BookPages.还假设Categories-Books,Books-Authors和Books-BookPages关系是一对多的.
如果从数据库中检索类别实体实例 - 包括"Books","Books.BookPages"和"Books.Authors" - 这将成为一个严重的性能问题.而且,不包括它们将导致"对象引用未设置为对象的实例"异常.
使用多个Include方法调用的最佳做法是什么?
编辑:通过第二个选项我的意思是这样的:
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
您可以为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专家来阐明这个主题.
这段代码可以返回null吗?
(this.Result == Result.OK)
Run Code Online (Sandbox Code Playgroud)
这行(或类似的行)可以返回除trueor 之外的任何内容false(例如null)吗?
亲自尝试一下,也许它与我的环境有某种关系:
查询:
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秒的增量.问题是为什么?
为了学习软件设计的新知识,我经常分析.NET框架源代码。
在今天的学习过程中,Microsoft.AspNetCore.Http.StatusCodes当我看到该类不是作为枚举实现,而是作为带有public const int字段(甚至不是属性)的静态类实现时,引起了我的注意。
当它看起来是一个完美的解决方案时,为什么不使用它enum来达到这个目的呢?这个设计决策背后的思考过程可能是什么?
我想我可能在这里遗漏了一些东西,我很乐意从这次经历中学到一些东西。
c# ×7
datetime ×2
sql-server ×2
architecture ×1
asp.net-core ×1
casting ×1
ctp4 ×1
enums ×1
kentico ×1
null ×1
return ×1
sql ×1
timespan ×1
transactions ×1