我最近开始使用Entity Framework迁移,并注意到在运行Update-Database命令时数据库名称并没有为我提供.
我的连接字符串是:
<connectionStrings>
<add name="DataContext" connectionString="Server=.\SQLEXPRESS;Initial Catalog=TestDB;Trusted_Connection=Yes;" providerName="System.Data.SqlClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
我第一次运行Update-Database时,我的数据库是用正确的名称TestDB创建的.但是,一旦我对我的某个实体进行了更改,除非我添加一个启动项目名称(我正在使用多项目解决方案),否则它将不再为我更新:
Update-Database -StartUpProjectName "TestDB.Data"
Run Code Online (Sandbox Code Playgroud)
然后,这将创建另一个新的数据库,迁移将始终继续使用.我不介意放入StartUpProjectName命令,但有没有办法覆盖它产生的数据库的默认名称?它始终将数据库创建为
TestDB.Data.DataContext
Run Code Online (Sandbox Code Playgroud)
有没有办法确保传递StartUpProject名称时创建的数据库只是名为TestDB,或者这是使用StartUpProjectName设置的限制?
作为一个注释,我认为我需要指定StartUpProjectName的原因是我有一个多层项目设置.迁移配置文件位于我的"数据"项目中,实体/模型位于我的"域"项目中,等等.我目前在Global.asax.cs文件中也没有任何初始化选项,就像我之前使用过的那样.代码首先是ef 4.2.所以在我的项目中,我只在Data项目中有一个DataContext,在该项目中也有一个迁移配置.
编辑:
自从我最初设置这个问题以来,我偶然发现了在多项目解决方案中命名数据库的"正确"方法.虽然下面的答案将起作用,但它确实意味着您在另一个区域中复制了您的web.config,这不是一个理想的解决方案.相反,您可以通过执行类似的操作将名称放入DbContext(DataContext只是我在项目中使用的名称):
public class DataContext : DbContext
{
public DataContext() : base("DatabaseNameHere")
{ }
public DbSet<Table1> Table1 { get; set; }
public DbSet<Table2> Table2 { get; set; }
public virtual void Commit()
{
base.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢,
丰富
I have 2 textboxes on my site for pickup date and drop off date both using the jquery date picker.
I am having trouble setting the drop off date value to be one day ahead of the pickup date that was selected.
Here is what I have:
$('.pickupDate').change(function() {
var date2 = $('.pickupDate').datepicker('getDate', '+1d');
$('.dropoffDate').datepicker('setDate', date2);
});
Run Code Online (Sandbox Code Playgroud)
The above will execute but the value in the drop off textbox will match the pickup value instead of being one day ahead. …
在过去,我使用asp.net的内置资源文件来处理本地化.它工作得很好,我们发现它在我们的业务中易于使用和维护.
但是有一个很大的缺点 - 我们的客户支持团队无法自己更新资源文件.我们即将启动一个大型项目,允许外部支持团队管理本地化的选项是一项主要要求.到目前为止,我们有客户只是联系我们,我们得到翻译的文件,然后将更新的resx文件滚动到实时服务器.
我知道更新resx文件导致应用程序重新编译,我不喜欢允许非技术人员下载和乱用resx文件的想法(更不用说在实时环境中对网站进行编译)所以我想知道如果除了沿着数据库路线走下去之外还有其他选择吗?
如果我们必须在几个数据库表中构建这种类型的本地化功能,那么是否有人有任何好的模板可以启动?
不确定它是否有助于了解,但我们在这里讨论的网站将被本地化为大约15种不同的语言,包括中文和阿拉伯语.翻译将应用于aspx页面和XML,这将使我们的系统留给第三方.
我目前有2个服务器设置.一个是运行Win Server 08的Web服务器,另一个是在Win Server 08上运行SQL Server 08的数据库服务器.
目前我有我的站点设置,以便它可以使用我使用数据库名称,服务器IP,db用户和db pwd创建的连接字符串来读/写数据库.我创建的db用户在数据库(而不是db owner)中设置了"公共"角色,并且只能运行exec存储过程.我的连接字符串目前看起来像这样:
<add name="SiteDBConn" connectionString="Server=IPOfServer;Database=DBname;User ID=userhere;Password=passhere;"/>
Run Code Online (Sandbox Code Playgroud)
虽然这对我来说非常合适,但我想设置一个不包含任何用户名和密码的数据库连接字符串.在我的一些其他服务器上,SQL服务器与Web文件位于同一服务器上,我可以使用可信连接并使用我的数据库中内置的"网络服务"用户.这让我运行一个没有用户名和密码的连接字符串,如下所示:
<add name="SiteDBConn" connectionString="Server=localhost;Database=DBname;Trusted_Connection=Yes;"/>
Run Code Online (Sandbox Code Playgroud)
在使用2个不同的服务器时,是否有一种简单的方法来实现与数据库的连接而无需使用用户名和密码进行硬编码(如上面的连接字符串)?我是否在浪费时间沿着这条路走下去,看看我创建的数据库用户如何只有exec权限呢?
谢谢你对此的看法.
我已经查看了本网站和其他网站上提供的许多解决方案来解决我的问题,但似乎没有一个适合我的解决方案。
在我的布局页面上,我在屏幕顶部有一个登录区域。除非用户登录,否则它始终存在。此登录表单上有一个 ValidationSummary 并且每次我使用站点上的另一个表单回发时,都会触发此登录表单的验证。
我几乎可以肯定这取决于我如何从我的布局页面调用这个登录页面。它不是共享文件夹中的局部视图,它位于我项目的一个区域中。在我的布局页面上,我像这样调用登录表单:
@Html.Action("LogOn", "Account", new { area = "Store" })
Run Code Online (Sandbox Code Playgroud)
登录页面包含以下内容:
@model Project.ViewModels.LogOn_ViewModel
@{
Layout = null;
}
@using (Ajax.BeginForm("LogOn", "Account", new { @area = "Store" }, new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "LoginContainer", LoadingElementId = "actionLoaderImage" }, new { id="LogonForm" }))
{
@Html.AntiForgeryToken()
<div class="loginArea">
<div class="notRegistered">
<h4>Not registered yet?</h4>
Register now<br/>
@Html.ActionLink("Register", "Index", "SignUp", new { area = "Store" }, new { @class = "greenButton" })
</div> <!-- /notRegistered -->
<div class="loginForm">
<div …Run Code Online (Sandbox Code Playgroud) 我正在使用Linq to XML和C#创建XML.这一切都很有效,除非我需要在XML中手动添加一行.只有当我有一个值传递给它时才会添加此行,否则我只是忽略整个标记.
我使用XElement.Load加载我存储在字符串中的文本字符串,但是当我将它附加到XML时,它总是在我的标记的末尾放入xmlns ="".
有没有办法告诉XElement.Load使用现有的命名空间,或者在将字符串放入XML时忽略它?
理想情况下,我只希望将我的字符串包含在正在创建的XML中,而不添加额外的标记.
以下是我目前所做的一个示例:
string XMLDetails = null;
if (ValuePassedThrough != null)
XMLDetails = "<MyNewTag Code=\"14\" Value=\"" + ValuePassedThrough +"\"></MyNewTag>";
Run Code Online (Sandbox Code Playgroud)
当我构建XML时,我将上面的字符串加载到我的XML中.在这里,xmlns =""被添加到XMLDetails值,但理想情况下我希望忽略它,因为它在尝试读取此标记时导致收件人出现问题.
XNamespace ns = "http://namespace-address";
XNamespace xsi = "http://XMLSchema-instance-address";
XDocument RequestDoc = new XDocument(
new XDeclaration("1.0", "utf-8", null),
new XElement(ns + "HeaderTag",
new XAttribute("xmlns", ns),
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", "http://www.addressofschema.xsd"),
new XAttribute("Version", "1"),
new XElement(ns + "OpeningTAG",
Run Code Online (Sandbox Code Playgroud)
...我的XML代码......
XElement.Load(new StringReader(XMLDetails))
Run Code Online (Sandbox Code Playgroud)
... XML代码结束......
正如刚才提到的.我的代码有效,它为我成功输出XML.它只是我使用XElement.Load加载的MyNewTag标记将xmlns =""添加到它的末尾,这导致了我的问题.
有什么想法我可以解决这个问题吗?谢谢你的帮助.
此致,Rich
我有一个简单的foreach循环,它遍历我存储在用户篮子中的productID,并从数据库中查找产品的详细信息.
从我的代码中可以看出,我目前所拥有的将返回屏幕上的最后一项 - 因为变量在循环中被覆盖.我希望能够连接这个,以便我只能在购物篮中显示商品的详细信息.
我知道我可以做一些非常简单的事情,比如只在我使用的转发器中存储ProductIDs,并且onitemdatabound在那里调用数据库但是我想在可能的情况下只进行一次数据库调用.
目前我有以下内容(从示例中删除了复杂的连接,但如果这很重要,请告诉我):
IQueryable productsInBasket = null;
foreach (var thisproduct in store.BasketItems)
{
productsInBasket = (from p in db.Products
where p.Active == true && p.ProductID == thisproduct.ProductID
select new
{
p.ProductID,
p.ProductName,
p.BriefDescription,
p.Details,
p.ProductCode,
p.Barcode,
p.Price
});
}
BasketItems.DataSource = productsInBasket;
BasketItems.DataBind();
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
我有一个Dictionary使用a double键形成的对象.它看起来像这样:
Dictionary<double, ClassName> VariableName = new Dictionary<double, ClassName>();
Run Code Online (Sandbox Code Playgroud)
我正在使用double键类型,因为我需要键看起来像这样:1.1,1.2,2.1,2.2等.
我的系统中的所有内容都很有效,除非我想删除组中的所有键,例如,所有1个值都是1.1,1.2等.
如果我知道密钥的完整值,我可以删除行,例如1.1,但在我的系统中,我只知道整数.
我尝试执行以下操作但收到错误:
DictionaryVariable.Remove(j => Convert.ToInt16(j.Key) == rowToEdit).OrderByDescending(j => j.Key);
Run Code Online (Sandbox Code Playgroud)
无论如何int通过转换密钥来删除每个值的所有行?
我现在一直在反对这个问题,我不知道我做错了什么.
我对我的一个控制器进行了非常简单的JSON调用,我希望使用jquery ui autocomplete返回客户端名称以及相关的ID值.我可以在Firebug中看到结果,但自动完成总是返回一个空列表.
由jquery生成的列表中的项目数是正确的 - 例如,如果我返回3结果,那么我看到带有3个空白列表项的建议菜单.问题似乎是jquery没有正确解析我的响应.
我没有在文本框上使用jquery验证,因为这里提出了一些其他问题.
如果这有所不同,我在本地运行它.
下面是我使用的jquery/HTML:
<script src="https://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript"> google.load("jquery", "1.6.4")</script>
<script type="text/javascript"> google.load("jqueryui", "1.8.16")</script>
<script type="text/javascript">
$(document).ready(function () {
$("#clientEntered").autocomplete({
source: '@Url.Action("ClientAutoSuggest", "Clients")'
});
});
</script>
<input type="text" name="clientEntered" id="clientEntered" />
Run Code Online (Sandbox Code Playgroud)
我的控制器看起来像这样:
public JsonResult ClientAutoSuggest(string term)
{
var filteredClients = (from c in clientService.GetClients()
where c.Name.ToLower().StartsWith(term.ToLower())
select new { ClientID = c.ClientID, Name = c.Name }).Take(10);
return Json(filteredClients, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)
如上所述,我确实看到结果在Firebug中传回,但生成的列表始终为空.
示例 - 如果返回2个结果,我将在Firebug中看到2个结果:
[{"ClientID":1,"Name":"Client 1"},{"ClientID":2,"Name":"Client 2"}]
Run Code Online (Sandbox Code Playgroud)
如果我查看生成的源代码,我会看到以下内容(正确2项但空白):
<ul style="z-index: 1; top: -16px; …Run Code Online (Sandbox Code Playgroud) c# ×4
jquery-ui ×2
autocomplete ×1
datepicker ×1
dictionary ×1
jquery ×1
linq ×1
localization ×1
namespaces ×1
resx ×1
sql ×1
validation ×1
web-config ×1
webforms ×1
xelement ×1