标签: ado.net-entity-data-model

更改实体框架使用的连接字符串的名称

默认情况下,如何更改Entity Framework模型绑定的连接字符串的名称?

假设我创建一个名为"Model1.edmx"的实体框架数据模型,将其指向名为"MyDb"的数据库,并使用Visual Studio添加新项目向导选择一些要映射的对象.EF模型位于类库项目中,因此当向导完成时,它会自动将名为"MyDbEntities"的连接字符串添加到项目的App.Config文件中.我的模型默认引用此连接字符串.

我知道我可以将连接字符串传递给我的模型对象上下文的构造函数,但是如何更改默认连接字符串的名称?

我正在使用VS 2010 Beta 2.

ado.net entity-framework ado.net-entity-data-model

10
推荐指数
1
解决办法
6791
查看次数

SQL Server视图可以有主键和外键吗?

是否可以在Microsoft SQL Server Management Studio中为数据库视图定义主键和外键?怎么样?

我正在尝试创建一个ADO.NET实体数据模型来读取我无法修改的四个旧的,格式不正确的数据库表.我已经创建了我需要的数据的视图.

这四个视图应该映射到一个简单的三实体EDMX,它具有一对多关系.

创建数据模型时出现此错误:

表/视图'...'没有定义主键,也没有推断出有效的主键.此表/视图已被排除.要使用该实体,您需要检查您的架构,添加正确的密钥并取消注释.

它正确地推断出两个视图的主键.但未能与其他两个这样做.

我的一个问题视图使用聚合函数:

SELECT MAX(...) ... GROUP BY ...
Run Code Online (Sandbox Code Playgroud)

另一个应该有两个外键的复合主键.

.net sql-server database-design entity-framework ado.net-entity-data-model

9
推荐指数
1
解决办法
2万
查看次数

ASP.NET Web API OData - 将DTO查询转换为实体查询

我们目前正在研究在我们的Web API中使用OData查询语法.我们不打算实现完整的OData实现 - 仅仅利用查询语法.

通常认为将应用程序分成多个层是一种很好的应用程序架构.在现代Web应用程序中,这些层将包括数据层和UI /传输层,它可以在将数据发送给客户时对存储在数据库中的信息进行不同的建模.

例如:您可能有一个如下所示的数据库(实体框架)模型:

public class Employee
{
    public Guid Id {get; set;}
    public string Name {get; set;}
    public int AccessLevel {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

但是您的Web API可能会以不同的有线格式向客户公开这些数据:

public class EmployeeDto
{
    public string Name {get; set;}
    public string SecurityClearence {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

使用ASP.NET Web API和(可能是??)Microsoft ASP.NET Web API OData库我们如何实现一个场景,我们的客户可以根据DTO格式编写查询,例如:

?$filter=(SecurityClearence eq 'TopSecret')
Run Code Online (Sandbox Code Playgroud)

......然后我们会根据我们的数据格式进行翻译.例如:

?filter=(AccessLevel eq 007)
Run Code Online (Sandbox Code Playgroud)

或其他一些格式,允许我动态查询我的数据库,如表达式.例如:

db.Employees.Where(translatedExpression);
Run Code Online (Sandbox Code Playgroud)

我已经想到了几种手动实现这一目标的方法,但我很想知道其他人如何解决这个问题,因为我觉得到目前为止我的实现是非常粗糙的,不太可能经得起审查.

是否有Web API OData库(以及相关的EDM库)的功能可以为我实现部分或全部功能?

c# expression ado.net-entity-data-model asp.net-web-api asp.net-web-api-odata

9
推荐指数
1
解决办法
2136
查看次数

无法将表格从模型浏览器拖动到edmx设计图面

我正在使用ODP.NET.我在项目中添加了一个ADO.NET模型.这样,就创建了一个edmx文件.我选择了"从数据库中创建"我选择了表并点击完成后,EDMX设计表面出现空洞,然而,模型浏览器窗口中显示我添加的表.

现在的问题是我无法将表从模型浏览器拖放到设计图面.请看这个截图:

在此输入图像描述

c# odp.net ado.net-entity-data-model entity-framework-6

9
推荐指数
1
解决办法
1075
查看次数

asp.net mvc - 将部分数据模型传递给局部视图

我希望构建一个获取模型列并打印它的局部视图.像这样的东西:

在视图中:

@model IEnumerable<products_comparison.Models.Product>
@{
ViewBag.Title = "Index";

var Brand = (from r in Model
             select r.Brand).Distinct();
}
<h2>
Index</h2>

@Html.RenderPartial("_DisplayAttribute",Brand)
Run Code Online (Sandbox Code Playgroud)

在局部视图:

<table>
    <tr>
        <th>
            Brand
        </th>
    </tr>
    @foreach (var row in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(r => row)
            </td>
        </tr>
    }
</table>
Run Code Online (Sandbox Code Playgroud)

我遇到了一些问题:

  1. 编译器不允许我将Barnd发送到局部视图.
  2. 如果您查看部分视图代码,您将看到Brand这个词,它是列名.我不希望在局部视图中硬编码"Brand"这个词,而是我喜欢列名称将在那里.
  3. 在局部视图中我需要放置@model products_comparison.Models.Product,但我不想发送孔表.我只想发一个专栏 - 但我不知道该放什么..

谢谢!

编辑:

为了清除一件事,我希望视图将为表中的每一列调用相同的局部视图(无论如何,对于表中的大多数列),每次我将发送一个不同的列(不同的值列为精确).

asp.net-mvc partial-views ado.net-entity-data-model razor

8
推荐指数
2
解决办法
2万
查看次数

将业务层添加到ADO .NET实体框架

我正在开发我的第一个.NET项目(.NET 3.5,ADO.NET和C#).我们已经构建了我们的实体模型,并且正在尝试构建一个干净的业务对象层.

我们已经获得了基本的实体模型,并且我们希望将某些业务级语义添加到默认数据访问器(导航属性等).

例如,让我们假设,我们之间有很多一对多的关系PersonBankAccounts.让我们假设在业务层我们想添加冻结帐户的功能.我们现在希望能够从Person导航到:

  • 他们所有的银行账户,
  • 他们的非冻结银行账户,和
  • 他们冻结的银行账户.

当然,我们希望将名义案例作为默认情况:如果我导航,Person.BankAccounts()我希望它返回非冻结帐户.我可以添加导航属性Person.FrozenBankAccounts()Person.AllBankAccounts().

我们提出的两种方法似乎都有相当多的代码味道.

  1. 我们找不到覆盖实体模型方法的方法.因此,请将其Person.BankAccounts()作为返回所有银行帐户的访问者.然后我们添加一个Person.FrozenBankAccounts()和一个Person.NonFrozenBankAccounts().
  2. 将另一个显式层添加到包装所有访问的代码库中BankAccounts.

方法1的问题在于,名义商业案例(访问未冻结的银行账户)是该批次最不直观的方法名称.

使用方法2,当我们从实体模型层继承对象时,我们必须覆盖每个方法以确保它不会从底层返回对象.所以我们创建一个BL_Person有一个BankAccounts()返回BL_BankAccount对象集合的方法.但在这种情况下,所有代码似乎都有些愚蠢.

有没有比我们考虑过的更好的方法?如果没有更好的方法,我所概述的两个中哪一个似乎是更好的解决方案(鉴于我们需要使用50多个课程)?

注意:在进行网络搜索时,我确实找到了一封给微软的公开信,题为" ADO .NET实体框架不信任投票"似乎意味着没有一种好方法可以明确区分关注点.

.net orm entity-framework ado.net-entity-data-model .net-3.5

7
推荐指数
1
解决办法
4962
查看次数

如何向ADO.NET实体添加约束?

我知道如何将一组字段标记为ADO.NET实体中的主键,但我还没有找到声明唯一约束或检查约束的方法.

设计器或框架上是否缺少此功能?

entity-framework ado.net-entity-data-model unique-constraint entity-framework-4

7
推荐指数
1
解决办法
2003
查看次数

实体框架 - 插入具有多个模型和数据库的实体

我将我的域拆分为多个Entity Framework模型.我有一些跨多个模型的共享实体(名为Lookup),但是,使用在实体框架中使用大型模型中描述的方法将这些实体替换为"使用"引用.然而,让我的案例稍微独特的是,我还将这些模型分成多个数据库(每个模型一个).

我在将一个共享实体插入公共数据库时遇到问题.它失败了,错误:

元数据集合中不存在具有标识"Harmony.Members.FK_ResidentialAddress_ResidenceTypeLookup"的成员.

它所指的外键在"公共DB"上存在.但我也没有在关系的另一端(命名为ResidentialAddress)与实体合作; 我甚至没有包含初始化的其他实体的上下文(名为MembersDb).但是,两个模型都编译到同一个程序集中.

Lookup到ResidentialAddress 没有导航属性.虽然在另一个方向有一个导航属性(我不会坚持 - 只在内存中使用).

MetadataWorkspace对于EntityConnectionCommonDb上下文的显式初始化仅使用SSDL/CSDL/MSL来获取该数据库所需的数据.我已经确认没有引用该组架构数据中提到的外键.

var metaAssembly = typeof(CommonDb).Assembly;
var schemaResources = new string[]
{ 
    String.Format("res://{0}/Common.ssdl", metaAssembly.FullName), 
    String.Format("res://{0}/Common.csdl", metaAssembly.FullName), 
    String.Format("res://{0}/Common.mdl", metaAssembly.FullName), 
}
MetadataWorkspace metadata = new MetadataWorkspace(schemaResources, new []{ metaAssembly });
EntityConnection connection = new EntityConnection(metadata, myDatabaseConnection);
Run Code Online (Sandbox Code Playgroud)

可能的CLUE:当我进入生成的类并删除所有EdmRelationshipAttribute属性以及EdmRelationshipNavigationPropertyAttribute从相关模型(MembersDb)配对时,它确实有效.

关键问题:

  1. 那么为什么实体框架试图对一个既不在范围内也不会受到记录插入影响的实体的关系做一些事情呢?

  2. 我很高兴让生成的代码删除上面提到的属性,但我仍然希望保留导航属性.我将如何改变CSDL来实现这一目标?

注意:"子"模型的持久性不是优先级,它们现在的跨数据库外键的完整性也不是优先级.这些数据库使用SQL CE保留,但它们最初是从单个主SQL Server数据库生成的.

.net c# entity-framework ado.net-entity-data-model entityreference

7
推荐指数
1
解决办法
1万
查看次数

如何在LINQ查询中访问关联?

实体数据模型

我在查询这个问题时遇到了问题(我是LINQ的新手,请原谅我),我花了几个小时在网上搜索.在SQL中我只想这样做

SELECT c.Forname, c.Surname cg.Title, g.GroupName
FROM Contact c
    inner join ContactGroup cg on cg.ContactID = c.ID
    inner join Group g on cg.GroupNameID = g.ID
WHERE g.ID=1;
Run Code Online (Sandbox Code Playgroud)

我曾经尝试过,但失败了,因为:

var result = 
    from c in cc.Contacts
    from cg in c.ContactGroups
    from g in cg.Group 
    where g.ID==1
    select new
    {
        c.Forename,
        c.Surname,
        cg.Title,
        g.GroupName
    };
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我我做错了什么或指导我到某个地方获取更多信息吗?

非常感谢.

c# linq ado.net-entity-data-model

7
推荐指数
1
解决办法
2176
查看次数

实体框架不为表或过程生成类

我正在使用Entity Framework在C#中生成类和函数,我需要与SQL服务器进行交互.

作为参考,这是我的一个表:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Area](
    [ID] [bigint] identity (1, 1) primary key,
    [Name] [nvarchar](100) NOT NULL
    )
GO
Run Code Online (Sandbox Code Playgroud)

运行实体数据模型向导(使用'数据库中的EF Designer')后,我的项目有edmx文件和一些新的.cs文件,但似乎它没有生成它需要的所有内容.

例如,在我的DatabaseEntities类中,我得到了:

    public virtual DbSet<Area> Areas { get; set; }
Run Code Online (Sandbox Code Playgroud)

但是,"区域"类型(以及其他三种缺失类型)没有定义.我也缺少存储过程的功能.

我已经尝试删除新文件并重新运行模型向导,但我得到了相同的结果.

有没有其他人遇到这个?

图片的标题说明:

我在最近的几次尝试中注意到,当向导运行时我也遇到错误:"未在项目上安装Entity Framework包".但是,当我点击它时,它仍然生成edmx和model.context.

我对Entity Framework版本6.0.0和6.1.2都有同样的问题.

重新安装框架对问题没有影响.

更新:

卸载nuget并重新安装最新版本允许我通过nuget安装EntityFramework而不会出错.但是,现在Add New Item对话框中缺少ADO.NET数据模型.

c# sql-server entity-framework ado.net-entity-data-model

7
推荐指数
2
解决办法
2万
查看次数