我刚买了2个月的godaddy托管.我使用EF CodeFirst编写了一个ASP.NET MVC3应用程序.在应用程序中,我使用初始化程序,如果模型已更改,将删除/创建数据库.当我尝试这样说时,我收到了一个错误
"Cannot drop the database 'cellularautomata', because it does not exist or you do not have permission."
Run Code Online (Sandbox Code Playgroud)
我认为这与我在共享主机上并且没有删除/创建数据库的权限这一事实有关.有没有办法解决?
asp.net shared-hosting code-first ef-code-first asp.net-mvc-3
如何在多对多场景中删除所有子对象?例如,我想删除所有roles属于a user.
我先使用EF代码.
我使用EF 4.1"代码优先"来创建我的数据库和对象.
鉴于:
public class Order
{
public int Id { get; set; }
public string Name { get; set; }
public virtual OrderType OrderType { get; set; }
}
public class OrderType
{
public int Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
订单有一个ordertype.订单类型只是一个查找表.价值观不会改变.使用Fluent API:
//Order
ToTable("order");
HasKey(key => key.Id);
Property(item => item.Id).HasColumnName("order_id").HasColumnType("int");
Property(item => item.Name).HasColumnName("name").HasColumnType("string").HasMaxLength(10).IsRequired();
HasRequired(item => item.OrderType).WithMany().Map(x => x.MapKey("order_type_id")).WillCascadeOnDelete(false);
//OrderType
ToTable("order_type");
HasKey(key => key.Id);
Property(item => item.Id).HasColumnName("order_type_id").HasColumnType("int");
Property(item => item.Name).HasColumnName("name").HasColumnType("nvarchar").HasMaxLength(100).IsRequired();
Run Code Online (Sandbox Code Playgroud)
现在在我们的App中,我们加载所有查找数据并对其进行缓存.
var …Run Code Online (Sandbox Code Playgroud) 我有这样一个实体:
public class Course {
public CultureInfo Culture {get; set;}
:
}
Run Code Online (Sandbox Code Playgroud)
我想只将Name属性映射CultureInfo到Entity Framework为我生成的表中的单个列.
我该怎么做?目前我已经尝试过查看DbContext的OnModelCreating()方法,但我找不到任何突出的东西.
我正在使用Entity Framework 4.1和MVC 3应用程序使用Code First方法.
非常感谢.
mapping code-first ef-code-first entity-framework-4.1 asp.net-mvc-3
愚蠢的问题:我们如何在EF 4.1 RTM上指定鉴别器列的值?我有这个:
modelBuilder.Entity<Entity>( )
.Map<Individual>( m => m.Requires( ind => ind.EntityKind ).HasValue( 1 ) )
.Map<Company>( m => m.Requires( c => c.EntityKind ).HasValue( 2 ) );
Run Code Online (Sandbox Code Playgroud)
这是我发现的关于它的链接.但是,似乎HasValue现在不接受任何参数.对此有何帮助?顺便说一下,我在哪里可以找到关于EF代码的完整正确的文档?
谢谢.
我有一个使用SQL Server CE 4.0和Entity Framework 4.1 Code First的ASP.NET MVC 3应用程序.它在本地工作正常,但在生产中,它失败并出现以下错误:
自创建数据库以来,支持'foobar'上下文的模型已更改.手动删除/更新数据库,或使用IDatabaseInitializer实例调用Database.SetInitializer.例如,DropCreateDatabaseIfModelChanges策略将自动删除并重新创建数据库,并可选择使用新数据对其进行种子设定.
我已经验证我的应用程序DLL和数据库文件在远程服务器上是最新的,但我继续收到此错误.
知道问题可能是什么?
注意:我使用的是Entity Framework 4.1的RTF版本,而不是CTP.
编辑
好的,如果我删除EdmMetadata表,并将数据库重新发布到生产服务器,我就不会再收到错误.但是,我完全不明白为什么我应该这样做.该模型没有改变.它在几周内没有改变,我今天重建了数据库.我想这整个事情的关键是哈希.与之比较的EdmMetadata哈希是什么?
编辑2
根据Mark S的回答,EdmMetadata表中的哈希值与SSDL的哈希值进行比较.但是,解决方案中的任何位置都没有实际的SSDL文件(没有扩展名为.ssdl的文件,也没有包含"ssdl"的文件).那么,SSDL实际存储在哪里?它是在设计时还是在运行时生成的?
编辑3
为了回答我自己的问题,SSDL 确实在运行时生成和缓存(这里有更多细节),但是看看SSDL的实际模式,我不确定我看到任何可能因为项目的DLL生活在另一个中而可能发生变化的东西位于不同的服务器上.
注意:我使用完全相同的数据库文件(.sdf)进行测试和生产.我实际上是将文件从bin/App_Data ftp到生产服务器上的App_Data文件夹.我也在ftp项目DLL.因此,测试和生产之间唯一不同的是这些文件存在于不同的地方.
另外,仅为记录,这是我的连接字符串:
DataSource=|DataDirectory|foobar.sdf" providerName="System.Data.SqlServerCe.4.0
编辑4(最终编辑?)
问题原来是一个DLL问题.我认为EntityFramework DLL的不同版本正在远程使用而不是本地使用.解决方案是确保我拥有最新版本的EF 4.1(RTW),清除并重新添加引用,重新生成数据库并重新发布.现在一切都很好.
asp.net-mvc entity-framework sql-server-ce ef-code-first entity-framework-4.1
我有以下代码:
modelBuilder.Entity<User>().HasMany(x => x.Items).WithRequired();
Run Code Online (Sandbox Code Playgroud)
模型看起来像
public class User
{
public long Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Item> Items { get; set; }
}
public class Item
{
public long Id { get; set; }
public string Title { get; set; }
public virtual User User { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当EF为我生成数据库时,我最终在Items表(User_Id和User_Id1)中有两个外键而不是一个.我如何配置这个,所以只为我创建了一个密钥?
出于测试目的,我从Item类中删除了User,在这种情况下,配置工作正常,只创建了一个键.
我有两个名为Category和Product的实体,其中1:n关系.
我希望得到一个带有孩子的分类.
这是我的linq:
_db.Categories.Where(c => c.CategoryID == catID)
.Include(c => c.Products.OrderBy(p => p.ProductID))
.SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)
由于orderby,此查询使用以下异常强制执行.
Include路径表达式必须引用在类型上定义的导航属性.使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性.参数名称:路径
linq linq-to-entities entity-framework eager-loading ef-code-first
简单:如何从DbEntityEntry对象获取映射表名?我在一个扩展DbContext的类中.我见过ObjectContext的例子,但不适用于CF.
谢谢.
我正在使用EF代码和mvc脚手架开发mvc3.0应用程序.我目前坚持实体之间的多对多关系.我有以下模型.
命名空间BigApp.Models {
#region POCO Objects
public class Group
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime UpdatedOn { get; set; }
public virtual ICollection<Project> Projects { get; set; }
}
public class Project
{
public int Id { get; set; }
public string Name { get; set; }
public string Url { get; set; }
public DateTime CreatedOn { get; set; }
public …Run Code Online (Sandbox Code Playgroud) ef-code-first ×10
c# ×2
code-first ×2
asp.net ×1
asp.net-mvc ×1
linq ×1
many-to-many ×1
mapping ×1
scaffolding ×1