使用EF Code First CTP 4,我创建了一个简单的项目.该项目由2个类组成,其中一个继承自其他类.
我希望将数据存储在单独的表中,但EF 4的默认值是将这两个实体映射/存储在同一个表中.
有了.ToTable(),我可以改变这种行为,但有了这个我有副作用:当我持久化一个Inherited对象时,EF不会在基类上保留公共值(例如Id).
我确定我要离开在映射中设置一些信息,但不知道哪个.
static void Main(string[] args)
{
Database.SetInitializer<ZooContext>(new RecreateDatabaseIfModelChanges<ZooContext>());
using (ZooContext ctx = new ZooContext())
{
Mammal mam = new Mammal() ;
mam.NumberOfLegs = 4;
ctx.Animals.Add(mam);
// ctx.Mammals.Add(mam) as the same behavior
ctx.SaveChanges();
}
}
public class ZooContext : DbContext
{
public DbSet<Animal> Animals { get; set; }
public DbSet<Mammal> Mammals { get; set; }
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
{
modelBuilder.Entity<Animal>().HasKey(p => p.Id).
MapHierarchy().
Case<Animal>(a => new { a.Id }); …Run Code Online (Sandbox Code Playgroud) 我正在使用MSDN上的Code First和Entity Framework 4.1教程构建一个MVC 3应用程序并且坚持" 默认情况下,此数据库将是一个SQL Express数据库,其名称源自上下文的强类型名称它的文件将在SQL Express默认数据文件夹中."
如果我想更改默认值(例如,将MDF文件放在我的App_Data文件夹中),我该怎么做?我将有几个不同的上下文(每个主要功能区域一个),并希望它们都存在于同一个数据库中.
在我的Global.asax中,我有以下几行:
Database.SetInitializer<myDbSupport>
(new DropCreateDatabaseIfModelChanges<myDbSupport>());
Run Code Online (Sandbox Code Playgroud)
如果我没有这个,那么当我更改模型时,sdf数据库将没有正确的结构.这在开发环境中是可以的,但是当我转向生产并希望更新数据库结构时,我当然不能放弃表,并丢失数据.
是否可以编写数据库更改脚本,并在部署具有更改结构的模型之前运行此更新?
我正在尝试在实体框架内首先学习代码,并且在建立关系时遇到问题.这是一个基本的人力资源数据库,为此有两个实体,员工和部门.
员工属于一个部门,该部门有一个团队管理员和一个经理,他们都是员工.我尝试使用以下方法对此进行建模:
EMPLOYEE
public int? DepartmentID { get; set; }
public virtual Department Department { get; set; }
Context:
modelBuilder.Entity<Employee>().HasOptional(x => x.Department);
DEPARTMENT
public class Department
{
[Required]
public int DepartmentID { get; set; }
[Required(ErrorMessage = "The description is required.")]
public string Description { get; set; }
public int? ManagerID { get; set; }
public virtual Employee Manager { get; set; }
public int? TeamAdministratorID { get; set; }
public virtual Employee TeamAdministrator { get; set; }
}
Context: …Run Code Online (Sandbox Code Playgroud) 我发现的System.Data.Entity.Database.SqlQuery方法的示例似乎与SQL 2008 R2兼容,但似乎不适用于SQL 2005.
此调用适用于SQL 2008 R2:
var myEntities = dbContext.Database.SqlQuery<MyEntity>("GetDataFromMySp @EntityId = {0}", entityId);
Run Code Online (Sandbox Code Playgroud)
但是,在SQL 2005中,此语句将抛出一个SqlException,并显示错误消息"GetDataFromMySp'附近的语法不正确".
stored-procedures entity-framework sql-server-2005 code-first ef-code-first
我有两个数据库,每个数据库都有自己的dbcontext.我设置了两个迁移配置.我可以为第一个db ust fine(Add-Migration DB1_InitialCreate -ConfigurationTypeName DB1Configuration)添加一个迁移.当我尝试使用:使用第二个db创建初始迁移时Add-Migration DB2_InitialCreate -ConfigurationTypeName DB2Configuration,我收到以下错误:
由于以下显式迁移未决,因此无法生成显式迁移:[201205082215265_DB1_InitialCreate].在尝试生成新的显式迁移之前应用挂起的显式迁移.
所以我按照它说的做,并用以下内容更新数据库:
Update-Database -ConfigurationTypeName DB1Configuration
Run Code Online (Sandbox Code Playgroud)
然后我尝试再次为第二个数据库添加迁移,但我一直收到相同的错误.
有关如何使迁移适用于两个数据库/上下文的任何想法?
entity-framework multiple-databases code-first ef-migrations
我怎样才能在ServiceStack.OrmLite代码中首先使用nText数据类型?
public class Email
{
[AutoIncrement]
public long ID { get; set; }
public DateTime Date { get; set; }
public string From { get; set; }
public string Subject { get; set; }
nText =>
public string Body { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我使用字符串数据类型,ormlite在数据库中生成nVarchar(8000)
我需要超过8000个字符的数据
我正在使用EF5.在我的域类中,我有一个我不想映射到表的字段.但我必须公开它,以便其他类可以访问它:
public class Person
{
// these are mapped fields
public string FirstName {get;set;}
public string LastName {get;set;}
// this is intended only for in-memory storage and not saved to DB
public string LoginFromIP {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试保存新记录时,上面的代码将生成"无效列LoginFromIP"错误消息,因为我的Person表中没有LoginFromIP.
当我删除setter它工作.我猜EF的自动映射需要getter和setter.如何在不在DB表中创建字段的情况下将LoginFromIP属性保留到域类?
谢谢!
我有这样的情况,我将有多个公司访问我的应用程序的单个实例,但我需要隔离他们的数据,以避免意外地为另一家公司加载数据,并简化每个公司的数据库备份.
理想情况下,我想将数据拆分到不同的数据库中,如下所示:
一个SQL Server数据库,包含所有用户的列表,以及所有用户/公司中通用的任何表
N个公司特定的数据库,每个数据库具有相同的模式,但每个公司的数据不同.登录时,我会动态选择特定用户公司的数据库
我希望能够查询公司特定的数据表,但是可以在共享数据库上执行连接(例如,我可以将外键存储在公司数据库表中,该表连接到共享表的主键上另一个数据库).
我发现了SQL Server同义词,看起来他们可以完成这项工作,似乎我可以通过在SQL Server Management Studio中使用查询成功地在两个数据库之间加入.
是否可以在Entity Framework Code First中使用同义词表,如果是这样,我的POCO类/ DbContext需要看起来像什么?
谢谢 :)
在我的项目中,我首先使用实体框架代码创建Appointments表。当我设置整数主键时,AppointmentNo如[Key]和[Required]时,它会创建初始主键从 1 开始的表。
我希望预约号码从 1000 开始。我的数据库是 SQL Server。请帮我。先感谢您。
[DataContract]
public class Appointment
{
[DataMember]
[Key]
[Required]
public int AppointmentNo { get; set; }
[DataMember]
[Required]
public string DoctorUN { get; set; }
[DataMember]
[Required]
public string PatientUN { get; set; }
}
Run Code Online (Sandbox Code Playgroud) code-first ×10
c# ×3
sql-server ×3
.net ×1
asp.net ×1
database ×1
entity ×1
servicestack ×1
synonym ×1