有没有在EF代码中首先使用Enums的标准方法?似乎有一些例子使用enum的包装类.
但是,我希望能够定义枚举并使用数据库初始化程序将枚举值也接种到数据库中.如果我必须从枚举中手动播种数据库表,那么定义枚举和创建包装器似乎没什么意义.
使用ASP.NET MVC 3项目一直在使用Entity Framework 4.1的Code First功能.
但是,数据库(SQL Server 2008 R2)不会在应用程序启动时自动创建表映射.关于如何做到这一点的任何想法?
该项目只有一个POCO:
namespace RIS.Models
{
public class Person
{
[Key]
public virtual string NRIC { get; protected set; }
public virtual string FirstName { get; protected set; }
public virtual string MiddleName { get; protected set; }
public virtual string LastName { get; protected set; }
}
}
Run Code Online (Sandbox Code Playgroud)
它还具有以下数据库上下文类:
namespace RIS.Models
{
public class RIS_DB : DbContext
{
public DbSet<Person> People { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
我已将SQL连接字符串添加到全局web.config文件中,如下所示:
<add name="RIS_DB" connectionString="Data …Run Code Online (Sandbox Code Playgroud) entity-framework visual-studio-2010 sql-server-2008-r2 ef-code-first asp.net-mvc-3
我首先使用Entity Framework 4.1代码时收到此错误.我找不到任何确切使用的来源.
Unable to load the specified metadata resource.
<add name="DataContext" connectionString="metadata=res://*/GrassrootsHoopsDataContext.csdl|res://*/GrassrootsHoopsDataContext.ssdl|res://*/GrassrootsHoopsDataContext.msl;provider=System.Data.SqlClient;provider connection string="Data Source=myserver.com;Initial Catalog=MyDataBase;Persist Security Info=True;User ID=username;Password=password"" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud) entity-framework connection-string ef-code-first entity-framework-4.1
如何找到类的哪个属性是实体框架代码优先实体POCO的主键?
请注意Id/class name +"Id"的字符串匹配是一个不好的选择.必须有一些方法来挖掘Entity Framework使用的约定并可靠地获取密钥属性.
提前致谢.
我正在使用EF Code First.我大量使用代码注释来指定如何验证数据(模型).但是,我通常只需要在UI层进行验证,并且能够在代码中将某些数据保存到数据库时禁止验证.但是,一旦我指定了验证规则,它们就会应用于任何地方 - 在UI上,数据库上,数据访问层上.
我可以暂时禁用EF层的模型验证,这样我就可以使用保存数据SaveChanges()而不会获得验证异常吗?
.net orm entity-framework ef-code-first entity-framework-4.1
我将EntityFramework.Migrations(Beta 1)添加到现有的Code-First应用程序中,该应用程序正在进行一些更改(对于我从代码优先API生成的表的迁移功能和更多微调)并进入GETDATE ()场景.
我已经在我的DbContext中使用自定义初始化程序类来运行SQL脚本来设置一些字段并在我的数据库中创建索引.我的几个AlterTable脚本主要用于设置具有默认值的字段(例如某些DateTime字段设置为GETDATE()).我真的希望EntityFramework.Migrations有一个答案,因为你可以很容易地指定defaultValue,但到目前为止我没有看到一个.
有任何想法吗?我真的希望做下面的事情会神奇地起作用.(毕竟这是'神奇的独角兽')
DateCreated = c.DateTime(nullable: false, defaultValue: DateTime.Now)
Run Code Online (Sandbox Code Playgroud)
不幸的是,从逻辑上讲,它将我的默认值设置Update-Database为执行命令的时间.
当我迭代通过ObjectStateEntries我期望[t]变量名称将是MY_ENTITY
foreach (ObjectStateEntry entry in context.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted))
{
Type t = entry.Entity.GetType();
...
}
Run Code Online (Sandbox Code Playgroud)
但我是真实的
System.Data.Entity.DynamicProxies.MY_ENTITY_vgfg7s7wyd7c7vgvgv.....
Run Code Online (Sandbox Code Playgroud)
如何确定可以将当前条目转换为MY_ENTITY类型?
c# entity-framework objectstatemanager ef-code-first dbcontext
我有一个基本实体类MyCompany.Core.Model.User,用于User实体的公共属性:
public class User
{
public string Username { get; set; }
public string Usercode { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我还有一个基本映射类MyCompany.Core.Model.UserMap来为基类设置代码的第一个映射User:
public class UserMap<TUser> : EntityMapBase<TUser>
where TUser : User
{
public UserMap()
{
// Primary Key
this.HasKey(t => t.Usercode);
// Table & Column Mappings
this.ToTable("Users");
this.Property(t => t.Username).HasColumnName("Username");
this.Property(t => t.Usercode).HasColumnName("UserCode");
}
}
Run Code Online (Sandbox Code Playgroud)
在一个单独的程序集中,我有一个派生类MyCompany.Model.User,User它继承自基类并使用一些其他属性扩展它:
public class User : Core.User
{
public string Surname { get; set; } …Run Code Online (Sandbox Code Playgroud) inheritance entity entity-framework ef-code-first entity-framework-6
仍然无法首先使用实体框架代码配置与ON DELETE SET NULL规则的关系.作为一种解决方法,您必须在内存中加载所有相关实体,然后在删除父实体时,EF将发出SQL命令以将其外键设置为Null.
这一点,虽然使用类似的东西自己实现这一点是微不足道的:
protected override void Seed(Context context)
{
context.Database.ExecuteSqlCommand("ALTER TABLE dbo.Guests DROP CONSTRAINT Guest_PreferredLanguage");
context.Database.ExecuteSqlCommand("ALTER TABLE dbo.Guests ADD CONSTRAINT Guest_PreferredLanguage FOREIGN KEY (LanguageID) REFERENCES dbo.Languages(LanguageID) ON UPDATE NO ACTION ON DELETE SET NULL");
}
Run Code Online (Sandbox Code Playgroud)
(例子来自这篇文章.)
我可以看到这种方法没有问题:加载的子实体将与数据库保持同步,因为EF将更新(设置为null)其外键和引用属性,并且数据库中的其他记录受到影响不会有任何危害,因为它们具有反正没装好.
那么,为什么这个功能仍然缺失呢?有一些隐藏的障碍吗?
我正在开发一个最终可能有多个UI版本/变体的项目,但到目前为止,我的解决方案Web中有两个子项目 - 包含ASP.NET MVC的Web界面.服务项目是我定义数据库上下文和模型的地方.
我的目标是在我的Web项目中对EF特定代码进行最少或可能没有引用.我希望它是独立的,所以当我用服务后端切换dll(从假设SQL到XML或MySQL)时,我不应该在我的MVC项目中进行多次修改.
这是它的样子:

我的问题是: - 到目前为止,我没有找到在Global.asax之外的其他地方使用Database.SetInitializer的示例.如果模型在我的工厂类似的DatabaseContextProvider类或服务类中更改,从内容中提取数据并将其提供给具有DTO的UI,我想放置数据库重新创建.那个地方有没有缺点? - 我想让上下文的connectionString可以使用Properties/Settings.settings文件进行配置 - 这是否合理?