除了将CLR类自动映射到EDM模型之外,该类还有什么优点或用例ODataConventionModelBuilder?
它消除了哪些特定的痛苦?如果可能,带有示例代码。
ado.net-entity-data-model convention-over-configur odata c#-4.0
我有一组独立的客户端对象,我想更新(我知道它们已经通过主键存在于数据库中)。现在我想将它们更新到数据库中。我知道我需要首先查询它们,所以我这样做了,现在基本上必须从分离的对象中获取属性并将它们应用于附加的对象。我最后调用保存更改。是否有一种巧妙的方法将这些属性从分离的集合应用到附加的集合?
注意:分离的对象中没有主键,但我确实有足够的信息可以通过比较器类进行链接。
我们最近将我们的软件升级到.NET 4.0和EF 4.0(没有自我跟踪实体)(以前的.NET 3.5 SP1).现在,在以前的工作代码中引发了一个新的异常,我们不明白.
我们有一个名为Resident的实体,另一个名为ResidentExtension的实体,它将已经很大的Resident实体扩展为1到(0/1)的关系.以下c#代码在我们的应用程序中生成一个新实体:
Residents resident = new Residents()
{
IsNewResident = true,
ResidentImage = Settings.Default.ResidentCardDefaultMaleImage,
IsActive = true,
ResidentCanBeDeleted = true,
ResidentExtensions = new ResidentExtensions(),
ResidentMasterDataState = EvoState.Error,
ResidentBasicDataState = EvoState.Error,
ResidentBenefactorsDataState = EvoState.Error,
};
Run Code Online (Sandbox Code Playgroud)
在此声明后直接引发以下异常:
违反了多重约束.关系VOCURA.EntityDataModels.EvocuraCarehomeManagementEntityModel.FK_ResidentExtensions_Residents'的角色'ResidentExtensions'具有多重性1或0..1.
它出现在生成的代码的setter中:
[XmlIgnoreAttribute()]
[SoapIgnoreAttribute()]
[DataMemberAttribute()]
[EdmRelationshipNavigationPropertyAttribute("EVOCURA.EntityDataModels.EvocuraCarehomeManagementEntityModel", "FK_ResidentExtensions_Residents", "ResidentExtensions")]
public ResidentExtensions ResidentExtensions
{
get
{
return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<ResidentExtensions>("EVOCURA.EntityDataModels.EvocuraCarehomeManagementEntityModel.FK_ResidentExtensions_Residents", "ResidentExtensions").Value;
}
set
{
((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<ResidentExtensions>("EVOCURA.EntityDataModels.EvocuraCarehomeManagementEntityModel.FK_ResidentExtensions_Residents", "ResidentExtensions").Value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
我发现的唯一解决方案是首先提交没有扩展名的Resident实体,然后创建ResidentExtension并设置外键(ResidentID)并将其添加到上下文并再次提交.但这不是它以前的工作方式.
有谁知道如何让这项工作再次成为旧的方式?
假设我有一个名为的数据库MyDatabase,它有两个表 - MyTable1和MyTable2.使用Code First方法与Entity Framework 4.x和.NET 4,我生成了一个名为MyDatabaseContextcontains MyTable1s和的上下文MyTable2s.
通常,表格被访问MyDatabaseContext.Table1s.<Command>.在我的数据库中,许多表共享几个公共字段(例如CreatedOn,ModifiedOn).我希望能够动态替换表名,以便我可以对任何表执行相同的查询.
我真正想要的东西(似乎没有)似乎是这样的 MyDatabaseContext[ContextTableName].<Command>.
有没有人知道在查询时是否存在动态选择表的功能.
.net c# entity-framework ado.net-entity-data-model entity-framework-4
在我的 ViewModel 中我有一些类似的代码:
public class OrderViewModel
{
private UserOrder order;
private DeliveryCentre deliveryCentre;
// This is my EF Container
private CatalogueContainer catalogue = new CatalogueContainer();
// do some stuff...
public void Save()
{
if (order == null)
{
order = catalogue.UserOrders.CreateObject();
}
// do some other stuff...
if ((deliveryCentre == null)
|| (deliveryCentre.Id != deliveryCentreId))
{
deliveryCentre = catalogue.DeliveryCentres.First(centre => centre.Id == deliveryCentreId);
//Causes a context error, not sure why...
order.DeliveryCentre= deliveryCentre;
}
catalogue.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
因此,当交付中心是新的且订单是新的时,我会遇到旧的“无法定义两个对象之间的关系,因为它们附加到不同的 ObjectContext 对象”错误,这对我来说似乎有点不公平 - 我只是无法弄清楚我需要做什么才能使它们更多地属于同一对象上下文。我认为这是由于对实体框架行为的一些根本误解造成的。
我目前正在尝试使用web服务作为ado.net edm的源代码.例如:http://odata.netflix.com/v2/Catalog/ $ metadata
我已经将web服务的xml存储在变量中,以便我可以在必要时使用它.有没有办法将web服务的数据与datamodel相关联,以便动态创建edm的表与webservice相关?
我只需要使用行名称和类型动态创建表.
最诚挚的问候朱利安
我在asp.net mvc 3.0应用程序中使用实体框架.我正在使用表值函数在我的一个数据库表上进行全文搜索.我已将返回类型设置为Request类型的对象.然后,我将结果提供给表达式构建器,该构建器对用户有权访问的实体列表中的"请求"执行包含操作.这是代码.
List<int> UserEntities = db.UserEntities
.Where(x => x.UserID.Equals(usr.ID))
.Select(x => x.EntityID).ToList();
var requests = db.SearchRequest(keyword)
.Where(BuildContainsExpression<Request, int>(x => x.EntityID, UserEntities));
//Expression Builder for Contains SQL functionality
static Expression<Func<TElement, bool>> BuildContainsExpression<TElement, TValue>(
Expression<Func<TElement, TValue>> valueSelector, IEnumerable<TValue> values)
{
if (null == valueSelector) { throw new ArgumentNullException("valueSelector"); }
if (null == values) { throw new ArgumentNullException("values"); }
ParameterExpression p = valueSelector.Parameters.Single();
// p => valueSelector(p) == values[0] || valueSelector(p) == ...
if (!values.Any())
{
return e => false;
}
var …Run Code Online (Sandbox Code Playgroud) ADO.Net实体数据模型设计器(VS2010)让我成为INSANE - 希望有人已经处理过这个并且知道如何让它停止.
当最初组合一个复杂的数据模型时,设计师可以自行确定描绘关联的线条的位置.然而,最终,为了便于阅读,我自己一丝不苟地放置这些线条.
但是,如果我完成布局,然后决定向现有实体添加属性,Designer会重新整理我的整个布局,或至少重定向导致该实体或来自该实体的每个关联线.
有没有办法禁用或以其他方式绕过这种自动布局功能?
我正在考虑将OData用于我的Web服务(基于Web API).不幸的是,我的数据源不是IQueryable.而不是实现我自己的IQueryable我几乎遵循这篇博文.
我不明白的是如何进入我的实体数据模型(EDM)?我是否必须在Designer中为EDM建模?或者这仅适用于EF,我可以使用"普通"类来设置关系属性吗?我不想暴露我的内部数据结构,因此我的EDM更像是DTO ......
在一个例子中,我看到我应该从EntitySetController派生,以获得符合OData的HTTP响应.我相信我不能使用EntitySetController,因为我不支持IQueryable.为了得到适当的回应,我该怎么做?
所以我试图创建我的ADO实体数据模型,我似乎无法通过"选择您的数据连接"页面.我选择了正确的连接,然后对敏感数据单击"否"或"是",然后单击"下一步".然而,什么也没出现.没有像常见的"您的项目引用最新版本的实体框架但是实体框架数据库提供程序"的错误消息.它只是关闭提示并返回我的项目.
有没有人见过这个?
ado.net ado.net-entity-data-model mysql.data visual-studio-2013