我正在尝试使用Code-First创建一个sdf,但是我收到的错误是没有为我的表定义键,并且无法理解为什么.
我有以下课程: -
public class Article
{
[Key]
public int ArticleID;
//[Display(Name = "Title")]
//[MaxLength(255)]
//[Required(ErrorMessage="Title is required")]
public string ArticleTitle;
//[Display(Name = "Date")]
//[DisplayFormat(DataFormatString = "{0:#.#}", ApplyFormatInEditMode = true, NullDisplayText = "")]
//[Required(ErrorMessage = "Date is required")]
public DateTime ArticleDate;
//[Display(Name = "Text")]
//[Required(ErrorMessage = "Text is required")]
public string ArticleText;
//[Display(Name = "Source")]
public string ArticleSource;
//[Display(Name = "Category")]
public int CategoryID { get; set; }
public virtual Category Category { get; set; }
}
public class Category …Run Code Online (Sandbox Code Playgroud) 我一直在su.Companies.Add(co)上得到一个NullReferenceException; 线.我认为,通过我的模型定义方式,它应该工作.自动完成,听起来像一个新手,完成这很好.我显然是EntityFramework的新手.
救命?
using (var db = new TicketdocketEntities())
{
var su = new SiteUser { UserName = model.UserName };
db.SiteUser.Add(su);
var co = new Company { Name = "Hello" };
su.Companies.Add(co);
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
楷模
public class Company
{
[Key]
public int CompanyId { get; set; }
public string Name { get; set; }
public virtual ICollection<SiteUser> SiteUsers { get; set; }
}
public class SiteUser
{
[Key]
public int SiteUserID { get; set; }
public string UserName { get; …Run Code Online (Sandbox Code Playgroud) asp.net-mvc entity-relationship entity-framework-4 ef-code-first entity-framework-4.1
我正在为我的项目进行数据迁移.但我有一个问题,例如:我有以下字段的Book表:
ID Name Color
1 Java red
2 MVC blue
3 .Net blue
Run Code Online (Sandbox Code Playgroud)
我尝试使用Code First技术将字段名称从"Color"更改为"BookColor".但迁移后,表格如下所示:
ID Name BookColor
1 Java null
2 MVC null
3 .Net null
Run Code Online (Sandbox Code Playgroud)
我丢失了我的场地值.如何确保所有价值都被转移?
我正在使用Entity Framework和MVC3
编辑这是我的DBMigration类:
public partial class AddCreative : DbMigration
{
public override void Up()
{
AddColumn("Authors", "Names", c => c.String(maxLength: 4000));
DropColumn("Authors", "Name");
}
public override void Down()
{
AddColumn("Authors", "Name", c => c.String(maxLength: 4000));
DropColumn("Authors", "Names");
}
}
Run Code Online (Sandbox Code Playgroud)
我已经改变Name,以Names 改变后(我失去了我的名字字段数据).
最近开始使用Code First Migrations并且希望在每个Up方法中播种数据.
这可能吗?
IE浏览器.
丢弃:
我正在定义POCO,与Entity Framework 4.0的Code First功能一起使用.
但由于我的数据来自外部源,并且我想保持标识列与外部源的相同,我想自己设置ID.
我在调用DbContext.Add()和context.SaveChanges()之前在我的代码中设置了ID,但ID值被忽略并由DB列上定义的自动增量(AI)设置.
数据库是mySQL,由EF自动生成.
有谁知道如何阻止在ID列上创建AI属性,或者显式设置实体ID,尽管列是这样定义的?
编辑:我从@flem得到的答案对我有用.但我需要一个稍微不同的场景才能工作:是否有可能以这样的方式定义POCO,当我设置它将使用它的值时,当我不设置它时,它会自动递增?根据这个mySQL论坛回答 mySQL应该很好地处理这个场景,但似乎Entity Framwork不...
我试图找出导致此错误的原因,我列出了我的代码中的一些相关区域,希望有助于解决我的问题.
配方实体的成员集合如下所示:
public virtual IList<Member> Members { get; set; }
Run Code Online (Sandbox Code Playgroud)
这是成员实体上的Recipes集合:
public virtual IList<Recipe> Recipes { get; set; }
Run Code Online (Sandbox Code Playgroud)
我在创建DbContext时执行以下操作,以便在单独的表中建立多对多关系
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// have to specify these mappings using the EF Fluent API otherwise I end up with
// the foreign key fields being placed inside the Recipe and Member tables, which wouldn't
// give a many-to-many relationship
modelBuilder.Entity<Recipe>()
.HasMany(r => r.Members)
.WithMany(m => m.Recipes)
.Map(x => {
x.ToTable("Cookbooks"); // using a mapping table for a …Run Code Online (Sandbox Code Playgroud) 使用Entity Framework 5.0,我试图在我的MVC站点的启动例程中手动迁移我的代码优先数据库.为此,我首先创建一个DbContext实例,然后运行以下代码:
var migrator = new MigrateDatabaseToLatestVersion<DataContext, Configuration>();
migrator.InitializeDatabase(this.dataContext);
Run Code Online (Sandbox Code Playgroud)
我假设与dataContext的连接关联的数据库将是迁移的数据库.尽管事实并非如此.相反,它总是尝试在本地SQLExpress实例上迁移数据库.
MigrateDatabaseToLatestVersion构造函数存在重载,它接受数据库连接字符串名称,但我的项目使用的是Azure,并且不使用标准的ConnectionStrings配置部分.理想情况下,我只是传递一个连接字符串,我可以使用它.这可能吗?
我首先尝试使用Code,并且我需要在db中使用(所有)我的表的前缀.
在我的DbContext中,我有以下实体:
public DbSet<Person> People { get; set; }
public DbSet<Department> Departments { get; set; }
Run Code Online (Sandbox Code Playgroud)
我可以通过覆盖成功映射我的实体的表名:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Person>().ToTable("w_people");
modelBuilder.Entity<Department>().ToTable("w_departments");
}
Run Code Online (Sandbox Code Playgroud)
但是对于那些不直接映射到表的表,我无法想出前缀.
在我的示例中,人们可以属于许多部门,因此EF创建了一个"非实体"表.(我是一个EF菜鸟所以这些表可能有一个奇特的名字)所以在我的数据库中我得到三个表:
w_people
w_departments
PersonsDepartments
Run Code Online (Sandbox Code Playgroud)
PersonsDepartments表就是我追求的目标.如何在生成后为这些生成的表添加前缀或更改名称/映射?
TIA
我建设使用实体框架代码首先与mvc4 Web应用程序的方式分层的应用,主要是分开的Data,Services和Web.
从我的网站上我这样做:
public void Foo() {
EntityService _svc = new EntityService();
Entity = _svc.FindById(1);
}
Run Code Online (Sandbox Code Playgroud)
服务方法如下所示:
private readonly MyContext _ctx = new MyContext();
public Entity FindById(long id) {
return _ctx.Entities.SingleOrDefault(q => q.EntityId == id);
}
Run Code Online (Sandbox Code Playgroud)
问题是当我需要使用多个服务时,因为每个服务都会创建它自己的上下文.
试图解决这个问题我做了这样的事情:
public class MyContext : DbContext {
private static MyContext _ctx;
public MyContext() : base("name=myConnectionString") { }
public static MyContext GetSharedInstance() {
return GetSharedInstance(false);
}
public static MyContext GetSharedInstance(bool renew) {
if(_ctx == null || renew)
_ctx …Run Code Online (Sandbox Code Playgroud) 我有这样的模型:
public class Entity
{
[Key, Required]
public virtual long EntityId { get; set; }
[Required]
public virtual string Name { get; set; }
public virtual long? ParentEntityId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的表:
create table Entities(
EntityId bigint not null identity(1, 1),
Name nvarchar(64) not null,
ParentEntityId bigint null
)
Run Code Online (Sandbox Code Playgroud)
ParentEntityId是EntityId的外键.
当我尝试创建一个Entity实体时,这是我得到的异常:
Invalid column name 'ParentEntity_EntityId'.
我不知道为什么EF会选择该特定列的约定,但如果我这样做:
[Column("TryPickThisName")]
public virtual int? ParentEntityId { get; set; }
Run Code Online (Sandbox Code Playgroud)
使用"TryPickThisName"列名称显示相同的错误.最后,如果我正确地写了列名或删除属性,它将显示原始错误消息.