非常直截了当的问题.我正在构建一个从SQL Server 2005实例读取数据的应用程序.我想在我的笔记本电脑上运行一些测试(没有SQL 2005),所以我正在考虑在本地数据库中交换以进行测试.
我正在使用VS2008,因此Compact Edition DB似乎是一个自然的选择.我原本希望换掉我的连接字符串,但似乎它只能让我使用SqlCeConnection而不是SqlConnection连接到CE数据库.任何方式,我可以在连接字符串中使用修饰符?
以下是伪代码:
SqlCeResultSet myResultSet = cmd.ExecuteResultSet(Options...etc);
bool found = myResultSet.Seek();
if found {
//do an Update
myResultSet.Read() //make current
//At this point we have a cursor positioned at a row to be edited
myResultSet.SetString(1, "value for col 1");
myResultSet.SetString(2, "value for col 2");
//... etc...
myResultSet.SetString(100, "value for col 100");
//i want to replace above with: CommonMethodToFillRowData(someRow)
//finally update
myResultSet.Update();
} else {
//do an insert
SqlCeUpdatableRecord myRec = myResultSet.CreateRecord();
//set primaryKey
myRec.SetInt32(0, pkValue);
//At this point we have a cursor …Run Code Online (Sandbox Code Playgroud) 我正在尝试插入一行并使用以下内容返回新行的标识:
INSERT INTO blah....;
SELECT @@IDENTITY as NewID;
Run Code Online (Sandbox Code Playgroud)
我试图执行与在C#中的DbCommand对象的单个调用这两个语句......它似乎没有工作或我有什么不对.
我已经读过Compact Edition不支持批量执行多个语句......但我也发现了这个:
如果要同时运行多个查询,则必须为每个语句包含一个换行符,并在每个语句的末尾加一个分号.
来源:http://technet.microsoft.com/en-us/library/bb896140(SQL.110).aspx
它是否有效......如果是这样,我错过了什么?
(我意识到我可以执行两个命令并且工作正常,但我想知道我是否遗漏了某些东西).
我正在尝试用一些IDatabaseIntialiser像这样的测试数据为我的数据库播种:
protected override void Seed(BlogDataContext context)
{
// <snip>
var post = context.Posts.Create();
post.Title = "My Life On Twitter";
// <snip properties>
// Set tags
post.Tags.Add(aspnetTag); // NullRefException
post.Tags.Add(razorTag);
Run Code Online (Sandbox Code Playgroud)
Post实体看起来像这样:
public class Post
{
// ...
public virtual ICollection<Tag> Tags { get; set; }
Run Code Online (Sandbox Code Playgroud)
Bitbucket的完整实体:帖子和标签.所有代码均在http://code.dantup.com/blog
但是,post.Tags为null,所以这不起作用.最初我是创建帖子new Post(),但是因为我正在调用CreateEF提供的方法,为什么集合没有初始化?
在这里实例化我自己的集合感觉很笨拙,如果我在构造函数中这样做,大概每次我从EF加载一个实体时,它都会在构造函数中创建集合,然后用一个包含实际数据的集合覆盖它. D B?
有没有办法告诉EF为我创建一个实体,包括我的集合/代理ICollections(假设ICollection是正确的选择)?
编辑:context.Configuration.ProxyCreationEnabled设置为true(默认情况下),这似乎是存在的原因?
.net asp.net-mvc entity-framework sql-server-ce ef-code-first
我有一个带有几个表的小型SQL CE 4.0数据库,使用Entity Framework 4进行映射.
这是我的代码
foreach (String designation in newItemDesignations)
{
ParameterData defaultValue = PDM.GetDefaultParameterData(designation);
// Fill the ItemParameterDBO object with the data
ItemParameterDBO dbParam = new ItemParameterDBO();
dbParam.ItemID = dbItem.ID;
dbParam.Designation = designation;
dbParam.High = defaultValue.High;
dbParam.Low = defaultValue.Low;
database.ItemParameterDBOes.AddObject(dbParam);
}
database.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
24 times每次newItemDesignations列表包含时,都会发生此代码exactly 525 elements.这总共需要12600行.
整个过程持续509 seconds.我猜这对12600行来说太多了.
我知道我在打电话SaveChanges 24 times.目前,应用程序设计不允许我将所有插入放入单个事务(with SaveChanges).但是,看看单个事务会发生什么.509 / 24 = 21 seconds或者a 40 ms per row. …
我正在尝试将Map控件中的快照作为WritableBitmap,将其转换为字节数组并将其保存在本地数据库中.它工作正常(我可以将字节数组转换回图像),直到我将更改提交给数据库.此时它会抛出异常"字节数组截断到8000的长度".我没有找到任何关于字节数组限制的文档.有谁知道如何增加8000的限制?我的字节数组是我的模型的成员:
private byte[] _locationImage;
[Column]
public byte[] LocationImage
{
get { return _locationImage; }
set
{
if (_locationImage != value)
{
NotifyPropertyChanging("LocationImage");
_locationImage = value;
NotifyPropertyChanged("LocationImage");
}
}
}
Run Code Online (Sandbox Code Playgroud) 我很少使用SQL,我在档案中找不到任何类似的东西,所以我问这个简单的查询问题:我需要一个查询,其中一个返回personID,只有第一个看到的时间
记录:
seenID | personID | seenTime
108 3 13:34
109 2 13:56
110 3 14:22
111 3 14:31
112 4 15:04
113 2 15:52
Run Code Online (Sandbox Code Playgroud)
通缉结果:
personID | seenTime
3 13:34
2 13:56
4 15:04
Run Code Online (Sandbox Code Playgroud)
这就是我所做的和失败的:
SELECT t.attendanceID, t.seenPersonID, t.seenTime
(SELECT ROW_NUMBER() OVER (PARTITION BY seenID ORDER BY seenID) AS RowNo,
seenID,
seenPersonID,
seenTime
FROM personAttendances) t
WHERE t.RowNo=1
Run Code Online (Sandbox Code Playgroud)
PS:注意SQL CE 4
我在尝试SQLCE在Windows Phone Mango应用程序中查询数据库时遇到问题.
我执行时遇到异常
foreach (var item in myDataContext.MyTable.Select(item => item))
The column name is not valid. [ Node name (if any) = t0,Column name = version ]
奇怪的是,当我基于任何单个列执行查询时,它工作正常
foreach (var item in myDataContext.MyTable.Select(item => item.SomeColumn))
知道这里有什么不对吗?
今天我将旧的应用程序从EF 4.2迁移到EF 4.3.1.在我的应用程序中,我使用CodeFirst,但在迁移后它停止工作,并找不到原因.为了清除任何其他可能的问题,我决定创建一个小型控制台应用程序,并使用ADO团队发布的数据迁移演练:
http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-code-based-migrations-walkthrough.aspx
我完全复制了博客的代码,但是没有正确工作(创建数据库,创建模式,插入博客),我得到了一些错误:
Conversion failed when converting datetime from character string."所有这些都在SQL Server 2005 Express上.
我尝试使用SQL Compact,但结果相同(不同的错误):
The format of the specified date or time datepart is not valid. [ String = 2012-04-19T13.21.04.364 ]我认为在这两种情况下,问题都在于EF希望作为第一次迁移进入的界限:
INSERT INTO [__MigrationHistory] ([MigrationId], [CreatedOn], [Model], [ProductVersion])
VALUES ('201204191321184_init', '2012-04-19T13.21.04.364', ...., '4.3.1');
Run Code Online (Sandbox Code Playgroud)
显然与格式有关.是错的,至少在我的语言环境中,它应该是:
这是一个错误还是什么?它始终与其他日期时间一起使用.
更新 我尝试将其作为显式迁移运行,并使用-verbose标志设置应用迁移,这是我得到的:
PM> Update-Database -Verbose
Using NuGet project 'ConsoleApplication2'.
Using StartUp project 'ConsoleApplication2'.
Target database is: '|DataDirectory|ConsoleApplication2.ConsoleApplication1.BlogContext.sdf' (DataSource: |DataDirectory|ConsoleApplication2.ConsoleApplication1.BlogContext.sdf, Provider: System.Data.SqlServerCe.4.0, Origin: Convention).
Applying …Run Code Online (Sandbox Code Playgroud) sql-server-ce entity-framework-4 ef-code-first ef-migrations
我有一个使用SQL Server CE 4.0和Entity Framework 4.0的ASP.NET项目.它在我的本地计算机上工作正常.
但是,当我将它移动到远程服务器,并尝试登录到程序的管理部分时,我收到以下错误:
The connection name 'LocalSqlServer' was not found in the applications configuration or the connection string is empty.
Run Code Online (Sandbox Code Playgroud)
它引用了远程服务器上machine.config中的以下行:
Line 237: <membership>
Line 238: <providers>
Line 239: <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" />
Line 240: </providers>
Line 241: </membership>
Run Code Online (Sandbox Code Playgroud)
现在,我的web.config中没有"AspNetSqlMembershipProvider"语句,它引用了一个名为"LocalSqlServer"的连接字符串.相反,我有以下内容:
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider" connectionStringName="PUGConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>
Run Code Online (Sandbox Code Playgroud)
这实际上在本地工作.连接字符串的名称是PUGConnection,而不是LocalSqlServer. …
asp.net asp.net-membership membership-provider sql-server-ce entity-framework-4
sql-server-ce ×10
c# ×4
.net ×2
database ×2
linq-to-sql ×2
asp.net ×1
asp.net-mvc ×1
identity ×1
insert ×1
sql ×1
sql-server ×1