目前我正在将我的应用程序部署到共享托管环境,并且代码优先与迁移一直很有效,除了一个小的打嗝.每次我想推送网站时,我都必须使用"Update-Database -script"选项,因为我必须在每个表名前加上,[dbo]因为默认情况下共享主机会创建一个与数据库用户名同名的默认模式名称.
如果我登录我的共享主机并创建数据库,那么我必须创建一个用户.如果我将该用户命名为admin,则代码优先创建,同时以管理员身份登录,如"[admin].[BlogPosts]".当应用程序运行时,所有表都被创建但我得到了EF异常,因为它说"[dbo].[BlogPosts]"无效.如果我将表的架构名称重命名为"[dbo]"而不是"[admin]"来修复它.
为了解决这个问题,我必须生成一个手动执行的迁移脚本,并在所有表名前添加"[dbo]",因为脚本只按名称引用表,而不是它们的模式和名称.
有没有一种简单的方法来解决这个问题?如果我所要做的就是发布应用程序和一切正常工作,那将是如此美好.如果它不是模式名称的差异,它将是一键式部署,一切都将是光荣的.
在Entity Framework Code First方法中,如何在POCO的EntityConfiguration类中为属性设置默认值?
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreatedOn { get; set; }
}
public class PersonConfiguration : EntityConfiguration<Person>
{
public PersonConfiguration()
{
Property(p => p.Id).IsIdentity();
Property(p => p.Name).HasMaxLength(100);
//set default value for CreatedOn ?
}
}
Run Code Online (Sandbox Code Playgroud) 我一直在网上搜索试图找出正确的语法,让实体框架代码首先用列创建我的表:varchar(max).
这就是我所拥有的.默认情况下,这会创建varchar(128).如何创建varchar(max)?
我试过[MaxLength]没有成功.
任何帮助,将不胜感激.谢谢!
[Column(TypeName = "varchar")]
public string MediaDesc { get; set; }
Run Code Online (Sandbox Code Playgroud) 我认为在何时使用WithOptionalDependent以及何时使用时获得明确的答案可能会有所帮助WithOptionalPrincipal.这两个函数的帮助有点不清楚,我发现自己正在挖掘其他网站上的多个Stack Overflow答案和答案,结合答案,以确信我的关系是正确的方向.
以下是MSDN所说的内容WithOptionalDependent:
将关系配置为可选:在关系的另一侧没有导航属性的可选.正在配置的实体类型将是依赖项,并包含主体的外键.关系所针对的实体类型将是关系中的主体.
以下是它所说的内容WithOptionalPrincipal:
将关系配置为可选:在关系的另一侧没有导航属性的可选.正在配置的实体类型将是关系中的主体.关系所针对的实体类型将是依赖的实体类型,并包含主体的外键.
"正在配置的实体类型"这一行总是让我困惑(我假设其他人).
在这个例子中:
class MyEntityA
{
[Key]
public int Id { get; set; }
public int BId { get; set; }
[ForeignKey("BId")]
public MyEntityB B { get; set; }
}
class MyEntityB
{
[Key]
public int Id { get; set; }
}
modelBuilder.Entity<MyEntityA>().HasOptional(a => a.B).WithOptionalDependent();
Run Code Online (Sandbox Code Playgroud)
是"正在配置的实体类型"是指MyEntityA或MyEntityB?我认为它是前者.
如果这是正确的,你什么时候使用的例子是什么WithOptionalPrincipal?
我实际上在我的代码示例中认为它应该是,WithMany而不是WithOptional选项.显然我还是很困惑!
这两个函数都有重载,导航属性朝另一个方向发展.我认为那些重载不会改变那些答案,但如果我错了,请纠正我.
我希望这对更大的社区也有帮助.
如何在应用程序启动之前或生成数据库之后处理我需要预先存在的数据的情况.例如,我有一个国家列表,我希望在代码优先生成数据库后将其加载到数据库中.我该怎么做呢?
应用程序的结构如下:
Repository > Service > WebMVC
xml在WebMVC项目中.
database entity-framework initialization ef-code-first entity-framework-4.1
我首先使用EntityFramework代码进行迁移.从包管理器控制台,我正在运行"update-database".这会执行我已覆盖的Configuration.Seed(context).
protected override void Seed(WebContext context)
{
Console.WriteLine("Console Test");
Debug.WriteLine("Debug Test");
Trace.WriteLine("Trace Test");
}
Run Code Online (Sandbox Code Playgroud)
我在哪里可以找到输出?
更好的是,如何输出回包管理器窗口?
谢,丹
我创建了一个新的Entity Frameworks Code First应用程序,DbSet(People)返回null.
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Repository : DbContext
{
public DbSet<Person> People;
}
Run Code Online (Sandbox Code Playgroud)
web.config:连接字符串
<connectionStrings>
<add name="Repository"
connectionString="Data Source=|DataDirectory|Repository.sdf"
providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
现在我打电话的时候
Repository _repo = new Repository()
_repo.People;
Run Code Online (Sandbox Code Playgroud)
_repo.People 将为null
我错过了什么?
我刚刚加入了EF 5并使用了他们的代码优先迁移工具,但是当我尝试启用迁移时,我似乎遇到了错误.
我输入Enable-Migrations包管理器控制台,然后说
没有从当前项目中找到的DbContext派生的类.
编辑生成的Configuration类以指定启用迁移的上下文.
为项目MyApp.MvcUI启用了代码优先迁移.
然后它在我的MvcUI项目中创建一个Migrations文件夹和一个Configuration类.事实上,我的DbContext存在于名为MyApp.Domain的类库项目中.它应该在该项目中完成所有这一切,并且应该没有问题找到我的DbContext.
c# entity-framework ef-code-first ef-migrations entity-framework-5
我有一个AgentBalance类与Agent关联,因此:
public class AgentBalance
{
...
public int AgentId { get; set; }
public virtual Agent Agent { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
按惯例,AgentId被检测为代理关系的FK,但我想在Mapping类中将其显式化,以便对未来的更改更安全.如果Agent有一个Balances集合,那么我知道如何做到这一点,例如:
HasRequired(t => t.Agent).WithMany(a => a.Balances).HasForeignKey(t => t.AgentId);
Run Code Online (Sandbox Code Playgroud)
但是,代理没有余额集合 - 我不希望该关联可以反向导航.但是如果没有映射中的.WithMany,我就无法选择指定.HasForeignKey.还有另外一种方法吗?(注意我知道我也可以使用属性来做这个,但我想使用流畅的API映射).
在使用Code First的EF 6.1中,您可以使用实体中的属性创建索引,或者使用以下行中的流畅API:
Property(x => x.PropertyName)
.IsOptional()
.HasMaxLength(450)
.HasColumnAnnotation("Index",
new IndexAnnotation(new IndexAttribute("IX_IndexName") {IsUnique = true, }));
Run Code Online (Sandbox Code Playgroud)
是否有任何方式WHERE PropertyName IS NOT NULL可以像在SQL Server中一样以原样的方式表示脚手架(参见:https://stackoverflow.com/a/767702/52026)?
ef-code-first ×10
entity-framework ×10
c# ×5
sql-server ×2
.net ×1
code-first ×1
database ×1
nuget ×1
sql ×1