编辑:这只发生在具有存储库的大型项目中.有没有人使用EF4和CodeFirst方法并使用存储库?请建议我.
你好.我目前正在使用EF4 CodeFirst Classes.在我的测试项目中,我有两个类,作者和书(作者得到书).我正在尝试做的是我在我的作者类中有一个AddBook,但似乎不能像我不能将它添加到集合中..这里是我的类和两个不同的例外.
public class Book
{
public virtual int BookId { get; set; }
public virtual string Title { get; set; }
public virtual Author Author { get; set; }
}
public class Author
{
public virtual int AuthorId { get; set; }
public virtual string Name { get; set; }
public virtual ICollection<Book> Books { get; set; }
public Author()
{
Books = new Collection<Book>();
}
public void AddBook(Book book)
{
book.Author = this;
Books.Add(book);
}
} …Run Code Online (Sandbox Code Playgroud) entity-framework code-first entity-framework-4 asp.net-mvc-2
我正在使用一个系统,该系统有许多需要显示的存储过程.为每个对象创建实体是不实际的.
是否有可能,我将如何退回DataTable使用ExecuteStoreQuery?
public ObjectResult<DataTable> MethodName(string fileSetName) {
using (var dataContext = new DataContext(_connectionString))
{
var returnDataTable = ((IObjectContextAdapter)dataContext).ObjectContext.ExecuteStoreQuery<DataTable>("SP_NAME","SP_PARAM");
return returnDataTable;
}
Run Code Online (Sandbox Code Playgroud) 在不暴露外键的情况下执行一对多关系的删除时,EF会删除父记录并尝试使子记录上的外键为空.这当然会导致错误,因为外键不可为空.将外键添加到子类会覆盖此行为,但我宁愿不公开它.
例如,给定以下两个类,我不希望将JobId作为Project类的属性.
public class Job : ModelBase
{
[Required]
[StringLength(100)]
public string Company { get; set; }
[Required]
[StringLength(100)]
public string JobTitle { get; set; }
public ICollection<Project> Projects { get; set; }
}
public class Project : ModelBase
{
[Required]
[StringLength(100)]
public string Name { get; set; }
[Required]
public string Summary { get; set; }
public int JobId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在EF Code First中启用级联删除而不在关系的多方面暴露外键?
我想在开始我的项目之前我应该想到这一点,但我已经使用代码优先方法成功构建并测试了一个迷你应用程序,我准备将其部署到生产Web服务器.
我已将文件夹移动到我的登台服务器,一切正常.我很好奇是否有建议的部署策略?
如果我对应用程序进行了更改,我不希望在重新启动应用程序时丢失所有数据.
我应该从代码优先项目生成数据库脚本,然后将其移动到我的服务器吗?
任何提示和指南链接都很有用.
谢谢.
我有一个问题,即新添加的实体的属性不是延迟加载的,如果在添加实体后立即需要.
例如:
我有一个具有虚拟JobRole属性的User实体:
public class User
{
public int Id { get; set; }
public virtual JobRole JobRole { get; set; }
public int JobRoleId { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我添加一个新用户:
public User Add(User user)
{
var addedUser = _myContext.Users.Add(user);
myContext.SaveChanges();
return addedUser;
}
Run Code Online (Sandbox Code Playgroud)
然后将返回的对新用户的引用传递给Razor视图,在该视图中它尝试显示JobRole(例如JobRole.Name).在将User传递给View时,它具有:
然后我会期望JobRole在被View使用时被延迟加载,但它不会导致null引用异常.
这是预期的行为,还是有办法让新添加的实体延迟加载其属性?
提前感谢任何想法.
环境:使用Entity Framework 4.2代码优先.启用了延迟加载.
我试图找到正确的语法来种植具有测试数据的数据库.我的产品表有一个外键.这是类别.我已经在数据库中播放了类别的值,但仍坚持如何将该关系添加到产品中.我试过这种方式无济于事.
context.Categories.AddOrUpdate(x => x.Name,
new Category
{
Name = "Fruit"
});
context.Products.AddOrUpdate(x => x.Name,
new Product
{
Name = "Cherries",
Description = "Bing Cherries",
Measure = "Quart Box",
Price = 1.11M,
Category = context.Categories.FirstOrDefault(x => x.Name == "Fruit")
}
});
Run Code Online (Sandbox Code Playgroud)
谁能指出我正确的方向?
我找不到EntityConfiguration.
RC的同样问题在这里,但我认为它将成为RTM版本.它在那里吗?
我观看了MSDN BLOG的一个关于数据库迁移的截屏视频.
有谁知道我们什么时候可以使用此功能?看起来它在CTP5中还不起作用.
顺便说一句,在更改架构代码后,有没有办法播种初始数据?
这就是我现在正在做的事情,它每次更改模型时都会擦除所有数据.
DbDatabase.SetInitializer<Context>(
new DropCreateDatabaseIfModelChanges<Context>());
Run Code Online (Sandbox Code Playgroud) 我已经以Entity Framework Code-First约定的方式定义了一组类,并使用System.ComponentModel.DataAnnotations属性注释了类属性.
现在我想从此代码生成SQL Server Compact Edition(SCSE)(4.0)数据库.
需要什么代码才能执行此操作以及需要导入哪些程序集?
到目前为止,我已导入C:\ Program Files(x86)\ Microsoft SQL Server Compact Edition\v4.0\Desktop {System.Data.SqlServerCe.dll,System.Data.SqlServerCe.Entity\System.Data.SqlServerCe. Entity.dll} dll文件.
任何指针赞赏.文章和诸如此类的.
.net entity-framework code-first sql-server-ce ef-code-first
为了回应Slauma对我在Windows XP上运行使用EF的应用程序问题的回答,我 将我的应用程序从Entity Framework 5.0转换回使用Entity Framework 5.0和目标框架.NET 4.0(也称为Entity Framework 4.4)
但是我遇到以下错误;
System.Data.Entity.DbSet<MyEntity> does not contain a definition for AddOrUpdate
and no extension method of a type System.Data.Entity.DbSet<MyEntity> accepting a
first argument of type System.Data.Entity.DbSet<MyEntity> could be found.
(Are you missing a using directive or assembly reference )
Run Code Online (Sandbox Code Playgroud)
我已经尝试搜索此错误消息的片段,但没有取得多大成功.奇怪的是,在这个微软链接中甚至没有提到4.4甚至 没有EF4.4的SO标签
code-first ×10
entity-framework ×10
.net ×2
c# ×1
deployment ×1
lazy-loading ×1
one-to-many ×1
seeding ×1