最初我首先使用EF 6代码创建一个新数据库和两个新表.代码是:
public class TestingContext : DbContext, IDisposable
{
public DbSet<CallDataRecord> CallDataRecords { get; set; }
public DbSet<Attempt> Attempts { get; set; }
public TestingContext()
: base("Testing")
{
Database.SetInitializer<TestingContext>(new MigrateDatabaseToLatestVersion<TestingContext, GenericIVR.Migrations.Configuration>());
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Attempt>().HasRequired(t => t.CallDataRecord).WithMany(a => a.Attempts).HasForeignKey(t => t.FKTaskId);
modelBuilder.Entity<Attempt>().Property(x => x.AttemptId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).IsRequired();
modelBuilder.Entity<CallDataRecord>().Property(x => x.TaskId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).IsRequired();
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的策略改变了,我不想要一个新的DB.我想将新表添加到现有数据库中DevDB.
如何更改代码?我必须使用吗?Reverse Engineering Code First?
更新: 连接字符串是:
<connectionStrings>
<add name="Testing" connectionString="Data Source=dddd.corporate.xxxx.com; Initial Catalog=Testing; User ID=sa; Password=password; MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)
我的所有模型至少包含两个关联.在ef4中对此进行建模时,我只能通过使用流畅的界面在没有第二个外键属性的情况下执行此操作.ForeignKey似乎是正确使用的属性,除了它需要一个字符串参数.
所以我的问题是,你能拥有一个导航属性并使用属性声明它吗?
public class User : IAuditable
{
// other code
public virtual User Creator { get; set; }
public virtual User Modifier { get; set; }
}
Run Code Online (Sandbox Code Playgroud) c# mapping entity-framework ef-code-first entity-framework-4.1
我有一个实体类
public class Employee
{
public long Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我已将Id字段设置为具有自动编号生成的主键
modelBuilder.Entity<Employee>().HasKey(e => e.Id);
modelBuilder.Entity<Employee>().Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Run Code Online (Sandbox Code Playgroud)
但我希望Identity从10000而不是从1开始播种,这是默认值.如何在EF中指定?
我有一个像这样的模特
public class User
{
[Key]
public long UserId { get; set; }
[Required]
public String Nickname { get; set; }
public virtual ICollection<Town> Residencies { get; set; }
public virtual ICollection<Town> Mayorships { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和
public class Town
{
[Key]
public long TownId { get; set; }
[Required]
public String Name { get; set; }
public virtual ICollection<User> Residents { get; set; }
public virtual ICollection<User> Mayors { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我希望EF能够使用自动创建的TownResidents和TownMayors表创建两个多对多的关系.我似乎无法找到必要的约定或显式注释来获得此结果.
相反,我在Town表中获得两个FK UserIds,在User表中获得两个FK TownIds. …
我有两个表父表和子表.子表具有列排序顺序(数值).由于缺少EF的支持来持久化IList包含排序顺序而不暴露排序顺序(请参阅:实体框架持久化子集合排序顺序)我的子类还有一个属性SortOrder,因此我可以存储具有排序的子项订购.
与引用问题的autor相反,我尝试加载始终排序的子项.因此,如果我加载一个我期望的父实例,那么子集合按排序顺序排序.如何使用Code First Fluent API和POCO实现此行为?
提示:在子集合上调用.Sort(...)不是一个选项.
我们正在使用TFS并为我们的Dev提供不同的分支.
在分支A中,我们进行了迁移以更改列大小
在分支B中,我们进行了迁移以添加新表.这个分支不知道分支A修改!!
两个修改都合并到主分支.
当我执行更新数据库时,它执行2迁移,但最后告诉我有待更改.如果我执行Add-Migration,它将创建与第一次迁移相同的(在分支A中).
无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移.将挂起的模型更改写入基于代码的迁移或启用自动迁移.将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移.您可以使用Add-Migration命令将挂起的模型更改写入基于代码的迁移.
是因为我上一次迁移的属性Target de IMigrationMetadata的内容中缺少某些东西,因为它不知道第一次迁移?
是否可以处理不同TFS分支中的迁移?
.net coldfusion entity-framework ef-code-first ef-migrations
我有2个课程:客户和调查.
每个客户可以进行多次调查 - 但只有一次默认调查.
我已经定义了这样的类:
public class Client
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string ClientName { get; set; }
public Nullable<int> DefaultSurveyID { get; set; }
[ForeignKey("DefaultSurveyID")]
public virtual Survey DefaultSurvey { get; set; }
public virtual ICollection<Survey> Surveys { get; set; }
}
public class Survey
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string SurveyName { get; set; }
[Required]
public int ClientID { get; set; }
[ForeignKey("ClientID")]
public virtual Client …Run Code Online (Sandbox Code Playgroud) 我在实体框架版本5中遇到代码首次迁移时遇到的奇怪问题.有时Update-Database由于挂起的更改而失败,但Add-Migration命令仅生成迁移,其中包含上次迁移中已包含的数据库更改且数据库是最新的.因此,我希望新的迁移是空的.
如何Add-Migration检测到哪些更改?它似乎没有使用数据库作为源.
在旧版应用程序中,大多数字符串属性不能为null,并且需要具有默认值string.empty.
我知道可以通过迁移执行此操作,但我正在寻找使用流畅配置界面执行此操作的方法:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Properties<string>().Configure(c =>
{
c.HasMaxLength(255);
if (!c.ClrPropertyInfo.IsDefined(typeof (NullableAttribute), false))
{
c.IsRequired();
// I want to set a default value (string.empty) here.
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点,或者我注定要初始化实体构造函数中的所有字符串?