标签: edmx

EF4:从EDMX的NavigationProperty获取链接的列名

我正在使用EDMX文件中的T4模板生成POCO(假设它们是MyEntityObject的子类).

我有3个实体,例如:

  • MyTable1(PrimaryKey:MyTable1ID)
  • MyTable2(PrimaryKey:MyTable2ID)
  • MyTable3(PrimaryKey:MyTable3ID)

这些实体具有以下关系:

MyTable1.MyTable1ID <=> MyTable2.MyTable1ID(MyTable1ID是MyTable1的外键)

MyTable2.MyTable2ID <=> MyTable3.MyTable2ID(MyTable2ID是MyTable2的外键)

或者在另一种观点中:

MyTable1 <= MyTable2 <= MyTable3

我想提取所有外键关系

NavigationProperty[] foreignKeys = entity.NavigationProperties.Where(np => np.DeclaringType == entity && ((AssociationType)np.RelationshipType).IsForeignKey).ToArray();
forewach (NavigationProperty foreignKey in foreignKeys)
{
    // generate code....
}
Run Code Online (Sandbox Code Playgroud)

我的问题:如何提取两个实体之间链接的列名?

像这样的东西:

void GetLinkedColumns(MyEntityObject table1, MyEntityObject table2, out string fkColumnTable1, out string fkColumnTable2)
{
    // do the job
}
Run Code Online (Sandbox Code Playgroud)

在示例中

string myTable1Column;
string myTable2Column;
GetLinkedColumns(myTable1, myTable2, out myTable1Column, out myTable2Column);
Run Code Online (Sandbox Code Playgroud)

结果应该是

myTable1Column = "MyTable1ID";
myTable2Column …
Run Code Online (Sandbox Code Playgroud)

t4 templates foreign-keys edmx entity-framework-4

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

如何防止在DataBase First Model中删除DataAnnotations属性

我有我的asp.net mvc 3应用程序与实体框架,我使用Database First模型来设置它.

我的步骤如下:1.使用表生成数据库2.创建ADO.NET实体数据模型文件(.edmx)并导入表3.在设计内部我添加了代码生成项并使用了ADO.NET DbContext Generator 4. a使用所有表格模型制作的Model1.tt持有者

我已经编辑了模型并使用DataAnnotations Attributes更新它们(仅用于众所周知的示例)

public class LogOnModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我对数据库进行更改并将其更新为edmx文件时,所有模型都将被覆盖,DataAnnotations属性将会消失.

我的问题:我如何使用数据库第一模型并仍然编辑模型进行特定验证,如我可以免费使用代码优先模型?(请不要第三方工具解决方案)谢谢

asp.net-mvc entity-framework edmx data-annotations database-first

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

在EF Database First项目中更新模型

我继承了一个使用Entity Framework Database First的项目.我正在尝试更新数据库时如何更新模型类,但我无法弄明白.到目前为止,我已经完成了一个名为Test的列到数据库中的表,然后在模型浏览器中我右键单击了.edmx文件并从数据库中选择了Update Model,然后按照出现的向导中的选项进行操作.现在,当我查看打开.edmx文件时呈现的数据库关系图时,我可以看到测试列已添加到表中.问题是相应的C#模型类没有更新.我不认为我必须手动更新它,因为文件顶部有此消息

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

所以问题是,如何更新此模型文件?我必须要做些什么才能做到这一点?

谢谢,

萨钦

edmx entity-framework-4 ef-database-first

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

当我尝试在我的asp.net mvc中导入我的存储过程时,选定的存储过程不返回任何列

我在我的SQL Server 2008 r2和asp.net mvc Web应用程序中有以下存储过程: -

USE [ITSERres]
GO
/****** Object:  StoredProcedure [dbo].[AdvanceSearchSP]    Script Date: 08/04/2014 16:21:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Object:  StoredProcedure [dbo].[AdvanceSearch2]    Script Date: 07/18/2014 10:37:47 ******/


ALTER PROCEDURE [dbo].[AdvanceSearchSP]
        -- Add the parameters for the stored procedure here

        @SearchType nvarchar(10) = null,
        @CustomerID bigint = null,
        @StringCustomerID nvarchar(50) = null,
        @SiteID bigint = null,
        @StateID bigint = null,
        @PrimarycustomerOnly bit = false,
        @RoleID int = null,
        @TypeID int = null, …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc entity-framework edmx asp.net-mvc-5

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

Visual Studio 2013 - 实体框架 - 更新向导无响应

我正在尝试通过更新向导刷新我的EDMX,我已经等了大约30分钟,但没有任何反应,它停止响应.我只有23张桌子,不应该太多.

30分钟等待后,更新向导将保持无响应状态

我试过这些,没有人工作:

  • 重启VS 2013.
  • 试过VS 2012.
  • 重启Windows.
  • 通过VS中的Servers选项卡添加数据服务器连接.

现在我对怎么做也毫无头绪.我知道我可以通过记事本手动更新EDMX定义,但每次都这样做太繁琐了.有关如何解决此问题的任何提示?

c# entity-framework edmx visual-studio-2012 visual-studio-2013

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

通过关联表的实体框架1to1关系在EDMX中不起作用

我在SQL Server数据库中有以下表 在此输入图像描述

其中有一个1-1关联表(FooBar),它在相应的FooId,BarId上有唯一索引,主键是(FooId,BarId).

要清楚的是,FooBar不允许任何FooId(由于唯一约束)不止一次出现在表中,任何BarId(由于唯一约束)都不会在表中多次出现.这就是使其成为1-1关联表的原因.

我希望在Foo和Bar之间建立这种关联表而不是1-1关系,因为在我的真实世界场景中,Bar将与其他不相关的表有其他关系,我将需要类似的关联表(而不是向Bar添加新的FK列)对于每个新表)

然后我将这些表格带入我的EDMX设计师.这种关系是以多对多而非一对一的方式引入的. 在此输入图像描述

这当然不是我想要的.我可以手动将模型更改为1-1关系. 在此输入图像描述

但后来我得到了一个错误(在设计师中). 在此输入图像描述

这是一个错误还是不可能在EF中以这种方式创建1-1关联?

c# sql-server entity-framework edmx entity-framework-6

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

在MSSQL中将varbinary值检索为BASE64

我正在寻找一种只使用T-SQL从表中检索实体数据模型(EDM)的方法(所以任何人,只使用Microsoft SQL Server Management Studio,都可以这样做).__MigrationHistory

我想要一个有效的BASE64字符串值.

我不想完全解压缩到EDMX.

我不想从*.resx迁移文件中获取它.

当我__MigrationHistory在SSMS中选择整体时,Model列值如下

0x1F8B0800000000000400CD57DB6EDB38107D5F60FF81E0D31648C5247DD906528BD4898BA075525469DF6969EC10CB8BCA4B607F5B1FFA49FB0B3BBACB521CB7E9A228020422357366E6F0CC50FEF7EBB7F8F54649720FD609A3137A121D53023A33B9D0EB8406BF7AFE377DFDEACF3FE2CB5C6DC8E7D6EE4569879EDA25F4CEFBE28C3197DD81E22E5222B3C699958F32A318CF0D3B3D3E7EC94E4E182004452C42E28F417BA1A05AE072667406850F5C2E4C0ED235FBF826AD50C93557E00A9E414253AE0A0917DCF325771035CB254278D8784ACEA5E098550A724509D7DA78EE31E7B34F0E526F8D5EA7056E7079BB2D00ED565C3A686A39EBCDBFB7ACE3D3B22CD63BB6505970DEA81F043C79D1F0C4C6EE4F629B763C229397C8B8DF9655576C26746E0C25E3386733694B9B433C47159C001721CC11D9353EEA84827A2AFF8EC82C481F2C241A82B75C1E910F612945F60EB6B7E61FD0890E520ED3C584F1DDCE066E7DB0A600EBB71F61D514719553C276FDD8D8B1731BF8D435BE0D029FAF31365F4AE8C4C01E752FFFB700A8286C144A167CF31EF4DADF25141F29998B0DE4ED4E83FA490BEC2B74F2368C82C4AC3F9DE999959473A1C136094C243F3944D47A738EAE09B75B518D9B82EFA5E028E973A8DB27AA14F2509E5D467DA3B2BA53DB8E667B5A3A5EF0A240CA062DDEEC90B4EEEFD9F3F4C7C5AE6A0C96B90734DF65DB45F2C6F2358CDE6268CC742EACF3AD902999E56A6236E67F0FB76DB401C5633DF78CB7C6E5F3CE29EFEBBFF26C46703D97732C4F81F655A5D06554F7FCC4AB1AB35C72FB409FCC8C0C4AEFEBB5C7BCEB3619FAD73B5384988DD21ED3C4263C8D3A7ECCF963921D9B74D13BE98E241A3772397C354DF4539B5082D4DC8BBCD2CED67950516910A55FE44C0AACB73758702D56E07C3D1429DE08A7A31BEDF7B95D9873B93C7CC5FCF2A11EB4F81200D9C46C5602EC4F0D787DCF6D76C7ED5F8A6F9E0D917E76884F67CDC111BD6F42D72A4B68BEC4C56D9D5E3DD19F38BBA7828FD9F08B2DBE0027D63D44F9FDA6212B95D483B636577A655A82B19C6146ADC988FF05789E232BE7160F90671E5F67E05C75D17EE632A0C9A55A427EA56F822F823F770ED4526E87F5C6ECF1F8D505B59B737C53942BF77F9480690A2C016EF49B2064DEE53D9FEA6F1F442990B780FB5587E28706C2ADB71DD2B5D1DF09D4D0770105E8B2296E016F120473373AE5F7F094DCF0FBE23DAC79B66DE7D67E90C307B14B7B7C21F8DA72E51A8CDEBFFC15C2CA9F21AFFE038574340FB80C0000
Run Code Online (Sandbox Code Playgroud)

这是我的示例数据库,所以我不介意分享它.

该列是类型varbinary(max),我google了如何将其转换为UTF8*-ish*文本.

varbinary到SQL Server上的字符串

SQL Server:将字符串转换为十六进制字符串并返回#sql #sqlserver

对于

SELECT CONVERT(VARCHAR(max), 0x1F8B0800000000000400CD57DB6EDB3810..... , 0)
Run Code Online (Sandbox Code Playgroud)

甚至更直接

SELECT CONVERT(VARCHAR(max), (SELECT TOP (1) [t0].[Model]FROM [__MigrationHistory] AS [t0]), 0);
Run Code Online (Sandbox Code Playgroud)

我得到以下结果

从字面上看:

我检查了我Model是否在LinqPad5中没有损坏或不完整并使用此处找到的工具,但它看起来没问题.

sql-server base64 entity-framework varbinary edmx

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

Visual Studio 2022 无法从数据库更新 EDMX 实体模型

突然间,我无法更新.edmxVisual Studio 2022 中所有项目中的文件。这是多年来我在各种项目中多次执行的操作:打开.edmx,右键单击空白区域,“从数据库更新模型” 。

现在它会弹出一个对话框,用于选择我的数据连接(连接字符串已经在配置文件中,并且已经存在多年)。然后对话框就关闭了,没有任何错误。所有项目都会发生这种情况,但不知道接下来该去哪里?

c# asp.net-mvc entity-framework edmx

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

实体数据模型,唯一索引

在我的实体数据模型中,我有一个实体,其中一个属性作为主键,另一个属性也具有唯一值,因此我想在该另一个属性上创建唯一索引.这种情况与具有PersonID和PersonSSN字段的Person实体非常相似.

有没有办法在设计器或edmx文件中指定在从模型生成数据库时应该在属性上创建这样的索引?

entity-framework unique-constraint edmx

8
推荐指数
1
解决办法
2086
查看次数

传递的主键值的数量必须与实体上定义的主键值的数量相匹配

我在SQL Server中创建了一个视图,其中包含来自不同表的最重要的列.将表的内容打印到ASP.NET MVC视图工作正常,但是当我想获取单个记录的详细信息时,问题就出现了.

传递的主键值的数量必须与实体上定义的主键值的数量相匹配.

我导航到这样做的具体记录:

@Html.ActionLink("Details", "Details", new {  id=item.Record_number  })
Run Code Online (Sandbox Code Playgroud)

记录号是主键.我通过右键单击.edmx模型中的特定变量手动设置它.然后我尝试使用以下内容获取特定数据:

    //
    // GET: /Record/Details/5
    public ActionResult Details(int id = 0)
    {
        try
        {
            RecordDataView record = db.RecordDataView.Find(id); //HERE THE ERROR OCCUR
            if (record == null)
            {
                return HttpNotFound();
            }
            return View(record);
        }
        catch(EntityException)
        {
            return RedirectToAction("NoDatabaseConnection", "Home");
        }
    }
Run Code Online (Sandbox Code Playgroud)

模型看起来像这样:

namespace Implant.Database
{
    using System;
    using System.Collections.Generic;

    public partial class RecordDataView
    {
        public int Record_number { get; set; }
        public Nullable<System.DateTime> DOB { get; set; } …
Run Code Online (Sandbox Code Playgroud)

.net sql-server asp.net-mvc entity-framework edmx

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