我正在研究迁移,以便清理我们的部署过程.将更改推向生产时所需的人工干预越少越好.
我在迁移系统中遇到了3个主要障碍.如果我无法找到一个干净的方式,他们是显示塞子.
1.如何为每次迁移添加种子数据:
我执行命令"add-migration",它使用Up和Down函数来构建一个新的迁移文件.现在,我想通过Up和Down更改自动更改数据.我不希望将种子数据添加到Configuration.Seed方法,因为它运行所有以各种重复问题结束的迁移.
2.如果无法满足上述要求,我该如何避免重复?
我有一个枚举,我循环,以将值添加到数据库.
foreach(var enumValue in Enum.GetValues(typeof(Access.Level)))
{
context.Access.AddOrUpdate(
new Access { AccessId = ((int)enumValue), Name = enumValue.ToString() }
);
}
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
即使我使用的是AddOrUpdate,我仍然会在数据库中获得重复项.上面的代码将我带到了第三个也是最后一个问题:
3.如何为主键提供种子?
我用以上代码列举的是:
public class Access
{
public enum Level
{
None = 10,
Read = 20,
ReadWrite = 30
}
public int AccessId { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我指定了我想要的值作为我的主键,但实体框架似乎忽略了它.他们最终仍然是1,2,3.我怎么能得到10,20,30?
目前这些EF的局限性还是有意限制,以防止我没有看到的其他类型的灾难?
我一直在与这个争斗多年,但我无法让它发挥作用.
我曾经说过的每个博客/网站都说你在IIS中没有什么需要做但这可能不正确,因为有多个网站配置,如应用程序,虚拟目录,简单的php/asp网站,vitual.
有人可以向我解释一下IIS7中的设置需要什么.
我有:
我设置了多个我测试过的网站,即:
所有上述工作都正常,并且放置app_offline.htm绝对没有任何作用.
请有人提供一些清晰度.
我有以下代码块让我头疼.
逻辑上它应该工作,因为我使用在using语句中提供锁的文件流.当它到达创建StreamWriter的行时,它无法说"文件不可写".
现在我的程序是一个多线程应用程序.任何线程都可能尝试写入此文件.我需要程序来锁定文件,读取内容,检查内容,然后回写任何更改.在此过程中,没有其他线程应该能够访问该文件.
using (var fs = File.Open(fileLoc, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{
var sr = new StreamReader(fs);
var str = sr.ReadToEnd();
var strArray = str.Split(',');
if (strArray.Any(st => st == text))
{
return;
}
sr.Close();
var sw = new StreamWriter(fs);
sw.Write(str + text);
sw.Flush();
sw.Close();
}
Run Code Online (Sandbox Code Playgroud) 请注意:我知道如何解决这个问题.我不是在寻找解决方案,我正在寻找问题本身的清晰度.
class Program
{
static void Main(string[] args)
{
using (var context = new TestDbContext())
{
var eventsFound = context.Events
.Where(e =>
e.EventDate >= DateTime.Now.AddDays(-1) &&
e.EventDate <= DateTime.Now.AddDays(+1)
)
.ToList();
}
}
}
public class TestDbContext : DbContext
{
public DbSet<Event> Events { get; set; }
}
public class Event
{
public int EventId { get; set; }
public DateTime EventDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
好的,所以上面的程序失败了:
LINQ to Entities does not recognize the method 'System.DateTime AddDays(Double)'
method, …
Run Code Online (Sandbox Code Playgroud) 我最近花了一段时间试图弄清楚需要哪些权限才能使该语句发挥作用:
if (!File.Exists(path))
{
// Create a file to write to.
using (StreamWriter sw = File.CreateText(path))
{
sw.WriteLine("Hello");
sw.WriteLine("And");
sw.WriteLine("Welcome");
}
}
Run Code Online (Sandbox Code Playgroud)
我最终对“每个人”都拥有“特殊权限”,这应该可以解决问题。遗憾的是它没有,这实际上可能是一个错误?
以下作品:
if (!File.Exists(_logFilePath))
{
using (var fs = File.Create(_logFilePath))
{
using (var sw = new StreamWriter(fs))
{
sw.WriteLine("Hello");
sw.WriteLine("And");
sw.WriteLine("Welcome");
}
}
}
Run Code Online (Sandbox Code Playgroud)
理论上是相同的(我认为),但我无法让第一个工作。
所以我的问题相对简单.
在我的Parameters.xml文件中,我有以下行:
<parameter name="SEND_TO_FRIEND_BCC" description="Email address of developer" defaultValue="" tags="">
<parameterEntry kind="XmlFile" scope"\\web.config$" match="/configuration/appsettings/add[@key='SEND_TO_FRIEND_BCC']/@value" />
</parameter>
Run Code Online (Sandbox Code Playgroud)
发布时,这是创建一个最终结果如下的文件:
<setParameter value="" name="SEND_TO_FRIEND_BCC" />
Run Code Online (Sandbox Code Playgroud)
上线时,这应该将SEND_TO_FRIEND_BCC的当前web.config值替换为空字符串.相反,当我尝试发布时,我得到以下内容:
Error: The 'SEND_TO_FRIEND_BCC" argument cannot be null or empty.
Error count: 1.
at InRelease.MSDeploy.Program.Main(String[] args)
Run Code Online (Sandbox Code Playgroud) 在我们的项目中,我们使用Microsoft规定的技术为每个环境提供多个配置文件,如下所述:http: //msdn.microsoft.com/en-us/library/dd465326.aspx
所以我们有以下文件:web.config web.Deploy.config web.Release.config
由于我们是一个小型开发团队,因此我们不需要让Visual Studio对这些文件进行更改,因此生活非常简单.除此之外,它们还受版本控制,以防我们需要回滚.
我们希望继续使用此方法,我们对将这些不同的文件移动到BuildMaster的配置管理系统不感兴趣.
我们如何让BuildMaster使用这些文件或使用MSDeploy创建我们的部署工件?
我很确定我会犯一些非常愚蠢的错误,但这让我感到疯狂.
我正在尝试执行以下操作:
var dateTime = DateTime.ParseExact("08/24/2016 12:00:00 AM", "MM/dd/yyyy HH:mm:ss tt", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)
但我一直得到以下异常:"字符串未被识别为有效的DateTime."
我试过了:"M/dd/yyyy HH:mm:ss tt""MM'/'dd'/'yyyy HH:mm:ss tt""M'/'dd'/'yyyy HH:mm:ss tt "
但到目前为止没有任何工作...任何帮助将不胜感激.
c# ×5
msdeploy ×2
.net-4.5 ×1
buildmaster ×1
createfile ×1
datetime ×1
deployment ×1
file-io ×1
filestream ×1
iis-7 ×1
linq ×1
locking ×1
publish ×1
seeding ×1
sql ×1
web-config ×1