使用codefirst EF4进行数据库重构的最佳实践是什么?
我很想知道当RecreateDatabaseIfModelChanges选项不可行时人们如何更改类和数据库.需要进行数据迁移.
目前微软有一个解决方案,首先使用模型:
有没有人有一个很好的代码策略?
鉴于此sql架构:
create table [dbo].[Courses_Students] (
[DummyColumn] [int] null,
[CourseId] [int] not null,
[StudentId] [int] not null,
primary key ([CourseId], [StudentId])
);
Run Code Online (Sandbox Code Playgroud)
如何定义复合主键和其他列EntityConfiguration?
如何将图像类型添加到EF4 Code First Entity?我需要为缩略图添加一列.
public Image Thumbnail { get; set; }
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有一个包含int位掩码的EF4实体(代码优先).我创建了一个Bitmask结构,以便更容易地使用位掩码(提供bool属性来访问位).位掩码结构包括用于转换为int和从int转换的重载隐式运算符.
我尝试将属性类型设置为位掩码结构,但值返回为0.我知道数据库中的值有一个值,并且位掩码在我的单元测试中有效.我将HasColumnType设置为"INT".
物业......
[Required]
[Display(Name = "Display Pages Bitmask")]
[Column(Name = "fDisplayPagesBitmask")]
public DisplayPagesBitmask DisplayPagesBitmask { get; set; }
Run Code Online (Sandbox Code Playgroud)
从上下文对象...
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Website>()
.Property(m => m.DisplayPagesBitmask)
.HasColumnType("INT");
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?如果是这样,我需要做些什么才能让它发挥作用?
我正在为我的应用程序构建dataAcess层我正在使用EF4自我跟踪实体我构建实体现在很好地退出我必须将自己的实体分离到他们的文件,所以我可以使用N层.到目前为止,我确实按照这个网址 http://www.codeproject.com/Articles/133689/How-to-Separate-Self-Tracking-Entities-to-Their-Ow.aspx?display=Mobile
但是当我构建解决方案时,它给了我错误错误2找不到类型或命名空间名称'IObjectWithChangeTracker'(您是否缺少using指令或程序集引用?)C:\ test\EF4 STE\STE\STEEntities\tbl_Departments. cs 22 49 STEEntities和更多这样的人可以帮助感谢
我正在尝试实现可能需要使用Redis的缓存模式.此模式的问题是我需要禁用Configuration.ProxyCreationEnabled,然后重新启用它以避免Web场中出现任何问题.
我想要做的是从IQueryable访问DbContext,所以我可以做一次而不是到处.最简单的方法是将正在使用的DbContext传递给我的缓存扩展,但是我遇到了这个帖子:
有没有办法使用EF 4.1 Code Fist(DbSet等)以类似于上面链接的方式访问DbContext?
我试图自己找到这个但是很难在IQueryable中使用反射从引用的DbSet中找到基类.
我有两张桌子:
RequirementId - PK
FixtureId - PK
RequirementId - FK/NULLABLE /唯一约束
夹具只能有1个要求,其他夹具不应该能够引用相同的要求.夹具不是必须具有要求,它是可选的.
我所做的是,在Sql Server中,我在Fixture表的RequirementId列上放置了一个Unique约束.如何在Entity Framework CTP 5中为此设置映射?
还可以在每个实体上使用双向导航属性吗?
public class Fixture
{
public int FixtureId { get; set; }
public Requirement Requirement { get; set; }
}
public class Requirement
{
public int RequirementId { get; set; }
public Fixture Fixture { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
也许我错了,所以任何建议都会很棒.提前致谢
entity-framework entity-framework-4 ef4-code-only ef-code-first entity-framework-ctp5
我正在使用POCO创建一个带有EF4的MVC3应用程序.我已经为我的EF实体添加了验证属性.现在,当我构建视图时,我想使用视图模型(也许使用AutoMapper来填充它们).
我遇到的问题是我必须在我的视图模型上重新定义我的验证属性,这违反了DRY主体.例如,如果我决定更改字段的大小,我必须更改POCO和使用它的任何视图模型的MaxLength属性.
是否有一些棘手的方法可以将验证规则从我的POCO映射到我的视图模型?
我试图了解如何使用WCF数据服务(基于EF 4.1)来创建一个宁静的Web服务,该服务将持久化作为JSON对象传递的实体.
我已经能够创建一个方法,可以接受带有一组原始数据类型作为参数的GET请求.我不喜欢这个解决方案,我更喜欢在http请求体中发送带有JSON对象的POST请求.
我发现我无法让框架将json序列化为一个对象,但是我可以手动完成它.
我的问题是我似乎无法读取POST请求的正文 - 正文应该是JSON有效负载.
下面是一个粗略的裂缝.我已经尝试了几次不同的迭代,似乎无法从请求体中获取原始JSON.
有什么想法吗?更好的方法吗?我只想发布一些JSON数据并进行处理.
[WebInvoke(Method = "POST")]
public void SaveMyObj()
{
StreamReader r = new StreamReader(HttpContext.Current.Request.InputStream);
string jsonBody = r.ReadToEnd(); // jsonBody is empty!!
JavaScriptSerializer jss = new JavaScriptSerializer();
MyObj o = (MyObj)jss.Deserialize(jsonBody, typeof(MyObj));
// Now do validation, business logic, and persist my object
}
Run Code Online (Sandbox Code Playgroud)
我的DataService是一个扩展的实体框架DataService
System.Data.Services.DataService<T>
Run Code Online (Sandbox Code Playgroud)
如果我尝试将非原始值作为参数添加到方法中,我会在跟踪日志中看到以下异常:
System.InvalidOperationException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
'Void SaveMyObj(MyNamespace.MyObj)' has a parameter 'MyNamespace.MyObj o' of type 'MyNamespace.MyObj' which is not supported for service operations. Only primitive types are supported …Run Code Online (Sandbox Code Playgroud) 我有一个带有数组属性的对象,我希望将其作为分隔字符串保存在数据库中.如何将该属性映射到数据库中的字段,而不是?
public class User() {
public int Id { get; set; }
public string[] Roles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
不完整的配置类:
public class UserConfig : EntityTypeConfiguration<User> {
public UserConfig() {
this.Property(u => u.Roles).__???__
this.Map(u => u.Properties<string[]>(r => r.Roles).__???__))
.HasColumnName("roles");
}
}
Run Code Online (Sandbox Code Playgroud)
对于此示例,"Roles"属性在转到数据库时将转换为"roleA,roleB,roleC",然后在从数据库读取时转换回数组.某处有数据映射事件吗?
有没有办法创建一个自定义属性,使EF CodeFirst 在分配给poco类的属性时使用nvarchar(max)作为数据类型?我知道这可以通过流畅的api实现,但我们希望将所有定义放在一个地方,这就是元数据类.
流畅的API:
modelBuilder.Entity<Event>().Property(p => p.TicketText).HasColumnType("nvarchar(max)");
Run Code Online (Sandbox Code Playgroud) fluent-interface code-first entity-framework-4 data-annotations ef4-code-only
是否可以一起使用CF EF4.1,SQL Server Compact 4和Microsoft Sync Framework?
正如我所知,MS Sync Framework需要SQL Server compact 3.5,但EF4.1使用SQL Server Compact 4 ...
更新 好的,我看到使用微软同步框架同步mssql ce4是不可能的.那么可以使用mssql ce3.5作为实体框架4.1的存储吗?
sql-server microsoft-sync-framework ef4-code-only ef-code-first
我首先使用EF4代码,并希望生成一个由类属性和外键组成的复合键.我有两个班:订单和公司.Order类包含引用,但这在公司之间不一定是唯一的.所以我打算使用由Reference和Company.CompanyId组成的复合键.
我已尝试使用以下设置它但我收到错误消息"键表达式无效".
modelBuilder.Entity<Order>().HasKey(o => new { o.Reference, o.Company.CompanyId });
Run Code Online (Sandbox Code Playgroud)
我也试过了
modelBuilder.Entity<Order>().HasKey(o => new { o.Reference, o.Company });
Run Code Online (Sandbox Code Playgroud)
这失败了.
这些是我的课程:
public class Order
{
public string Reference { get; set; }
public Company Company { get; set; }
}
public class Company
{
public int CompanyId { get; set; }
public virtual ICollection Orders { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.