CTP5附带的DbContext T4模板没有关联修正,并且并非所有属性都标记为虚拟.这是否意味着它与上下文断开连接时不支持ChangeTracking?首先,它是否支持ChangeTracking,即使在被Context(通过动态代理)跟踪时也是如此?我发现变更跟踪的要求是所有属性都应标记为虚拟.
与EF4 POCO生成器相比,我们是否正在使用DbContext生成器丢失任何功能?
非常感谢任何回应.
我正在使用EF4 CTP 5,CodeFirst.
请先看我的课程:
public class Guest
{
[Key]
public Guid GuestID { get; set; }
public Language PreferredLanguage { get; set; }
public Guid? LanguageID { get; set; }
}
public class Language
{
[Key]
public Guid LanguageID { get; set; }
[Required(ErrorMessage = "Enter language name")]
[StringLength(50, ErrorMessage = "Language name is too long")]
public string LanguageName { get; set; } // in origine language
}
Run Code Online (Sandbox Code Playgroud)
我的目标是为访客语言关系设置一定的"删除规则".删除语言时,我不想删除相应的guest虚拟机(因此无级联删除).相反,我希望客人的LanguageID为"Set NULL".
我希望流利的API在这里支持我.但我找不到任何有用的东西.WillCascadeOnDelete(bool),它不提供我需要的选项.我错过了什么吗?或者这只是在CTP 5中没有实现?
谢谢你的帮助!
这是我的模型:
public class Customer
{
public int ID { get; set; }
public int MailingAddressID { get; set; }
public virtual Address MailingAddress { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
}
public class Address
{
public int ID { get; set; }
public int CustomerID { get; set; }
public virtual Customer Customer { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
客户可以拥有任意数量的地址,但这些地址中只有一个可以是邮寄地址.
如果我只使用一个,我可以得到One to One关系,One to Many工作得很好,但是当我尝试介绍两者时,我在Addresses表上获得了多个CustomerID键(CustomerID1,CustomerID2,CustomerID3).我真的把头发撕成了这个.
为了映射一对一的关系,我使用这里描述的方法http://weblogs.asp.net/manavi/archive/2011/01/23/associations-in-ef-code-first-ctp5-part- 3,一到一个外键,associations.aspx
使用Entity Framework 4 CTP5 Code First和本例
是否可以访问鉴别器值?
我想在投影中使用它
context.BillingDetails.Select(x => new { Number = x.Number, DiscrimitatorValue = /* how do I get the discriminator value? */ });
Run Code Online (Sandbox Code Playgroud)
从这篇文章我明白鉴别器不能映射到属性,但有没有其他方式访问它?
当我尝试序列化通过EF4 CTP5返回的对象时,我遇到循环引用问题.我使用代码第一种方法和简单的poco为我的模型.
我已经将[ScriptIgnore]属性添加到任何提供对对象的反向引用的属性,并且令人烦恼的是,如果我手动实例化poco,它们似乎工作正常,即它们串行化为JSON,并且确认了scriptignore属性.但是,当我尝试序列化从DAL返回的对象时,我得到循环引用异常"序列化'System.Data.Entity.DynamicProxies.xxxx'类型的对象时检测到循环引用"
我已经尝试了几种方法来检索数据,但他们都遇到了这个错误:
public JsonResult GetTimeSlot(int id) {
TimeSlotDao tsDao = new TimeSlotDao();
TimeSlot ts = tsDao.GetById(id);
return Json(ts);
}
Run Code Online (Sandbox Code Playgroud)
下面的方法效果稍好,而不是时间段动态代理对象导致循环引用其为约会对象.
public JsonResult GetTimeSlot(int id) {
TimeSlotDao tsDao = new TimeSlotDao();
var ts = from t in tsDao.GetQueryable()
where t.Id == id
select new {t.Id, t.StartTime, t.Available, t.Appointment};
return Json(ts);
}
Run Code Online (Sandbox Code Playgroud)
这个问题的任何想法或解决方案?
更新 我希望尽可能使用开箱即用的序列化器,尽管Json.Net通过nuget可以替代我希望它可以像我预期的那样使用它...
c# asp.net entity-framework-4 entity-framework-ctp5 asp.net-mvc-3
我正在使用单数表名称的标准.默认情况下,EF4 Code First具有复数表名.我已经把代码覆盖了这个约定,但似乎没有用.
使用部分:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.Data.Entity.Database;
using System.Data.Entity.ModelConfiguration;
using System.Data.Entity.ModelConfiguration.Conventions.Edm;
Run Code Online (Sandbox Code Playgroud)
数据背景:
public class SiteDataContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<BlogFeedback> BlogFeedbacks { get; set; }
public DbSet<BlogCategory> BlogCategories { get; set; }
// Twist our database
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingEntitySetNameConvention>();
base.OnModelCreating(modelBuilder);
}
}
Run Code Online (Sandbox Code Playgroud)
创建的表:
因为约定覆盖(以及我需要的)应该是:
任何人都知道为什么覆盖线不起作用?非常感谢.
我正在尝试将Entity Framework 5用于我的项目,但我似乎在安装程序集时遇到了一些问题.因为我最初使用nuget安装了这个,所以我不确定我需要做什么才能使它按照我的预期工作.有什么帮助我需要做些什么来解决这个问题吗?
*System.IO.FileNotFoundException:无法加载文件或程序集EntityFramework,Version = 5.0.0.0,Culture = Neutral,PublicKeyToken = b77a5c561934e089'或其中一个依赖项系统找不到指定的文件.WRN:程序集绑定日志记录已关闭.要启用程序集绑定失败日志记录,请设置注册值...*
通过使用融合日志,我得到了这个
*** Assembly Binder Log Entry (7/17/2012 @ 9:29:09 PM) ***
The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable C:\PROGRAM FILES (X86)\MICROSOFT VISUAL STUDIO 11.0\COMMON7\IDE\COMMONEXTENSIONS\MICROSOFT\TESTWINDOW\vstest.executionengine.x86.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = WORKALOT\Tokorie
LOG: DisplayName = Budget.Data, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
LOG: Appbase = file:///C:/Development/Summer2012BudgetApp/Budget.Service.Test/bin/Release
LOG: Initial …Run Code Online (Sandbox Code Playgroud) 当我尝试加入表格时
var query =
from foo in db.Foos
from bar in db.Bars
where foo.ID == bar.FooID
where foo.ID == 45
select bar;
query.toArray()
Run Code Online (Sandbox Code Playgroud)
我收到这样的错误
Unable to create a constant value of type 'Bar'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.
Run Code Online (Sandbox Code Playgroud) 我知道这个问题已经有了解决方案(例如这个问题),但是我真的无法将映射逻辑附加到域(POCO类)所在的同一个程序集中.
还有其他方法吗?
我找到了这篇不错的博文,但我无法让它发挥作用.这是模型:
public class Institute
{
/**
Code omitted
**/
protected virtual ICollection<InstituteText> InnerInstituteTexts { get; set; }
private InstituteTextSet _TextSets;
public InstituteTextSet Texts
{
get
{
if (_TextSets == null)
_TextSets = new InstituteTextSet(InnerInstituteTexts);
return _TextSets;
}
}
}
Run Code Online (Sandbox Code Playgroud)
映射代码:
var instituteTextExpression = ObjectAccessor<Institute>.CreateExpression<ICollection<InstituteText>>("InnerInstituteTexts");
institute.HasMany(instituteTextExpression)
.WithRequired()
.HasForeignKey(t => t.InstituteId);
Run Code Online (Sandbox Code Playgroud)
其中CreateExpression定义为:
public static Expression<Func<T, TResult>> CreateExpression<TResult>(string propertyOrFieldName)
{
ParameterExpression param = Expression.Parameter(typeof(T), "propertyOrFieldContainer");
Expression body = Expression.PropertyOrField(param, propertyOrFieldName);
LambdaExpression lambda = Expression.Lambda(typeof(Func<T, TResult>), body, param); …Run Code Online (Sandbox Code Playgroud) code-first entity-framework-4 ef-code-first entity-framework-ctp5 entity-framework-4.1
我正在使用Entity Framework CTP5和Code First.我需要更改SQL Server中特定列的排序规则.我相信默认排序规则是SQL_Latin1_General_CP1_CI_AS,但我需要将此列匹配更改为SQL_Latin1_General_CP1_CS_AS(区分大小写).
有没有办法在Code First中使用ModelBuilder来更改特定的列排序规则?
BarDev
sql-server entity-framework entity-framework-4 ef-code-first entity-framework-ctp5