标签: ef-code-first

实体框架Power Tools在生成视图时出现问题

我已经创建了控制台应用程序.然后我执行了Install-Package EntityFramework,设置了目标.net 4.0.

我的简单模型是

public class Abonent
    {
        public Abonent() {}
        [Key]
        public int AbonentId { get; set; }
        public string Name { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

我的dbcontext是(ModelContext.cs)

public class ModelContext : DbContext
    {
        public ModelContext():base(){}
        public DbSet<Abonent> Abonents { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

Program.cs是

class Program
    {
        static void Main(string[] args)
        {

            Database.DefaultConnectionFactory = new System.Data.Entity.Infrastructure.SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
            ModelContext _abonentContext = new ModelContext();

            Abonent abonent=new Abonent();
            _abonentContext.Abonents.Add(abonent);
            _abonentContext.SaveChanges();
        }
    }
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但是当我按下右键单击ModelContext.cs并选择时Entity Framework -> Generate View,我会得到一个消息框,说"调用目标已抛出异常".

我做错了什么?是否存在ef电动工具的替代品?(VS 2010 SP1,实体框架Power Tools …

entity-framework ef-code-first

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

在C#EF 5 Code First中用于多对多关系的Lambda表达式

我正在使用EF 5 Code First和VS 2012.我有文章和标签的课程.每篇文章至少有一个标签相关联.请参阅以下课程.

public class Article
{
    public int ArticleId { get; set; }
    public virtual ICollection<ArticleTag> Tags { get; set; }
}
public class Tag
{
    public int TagId { get; set; }
    public string TagName { get; set; }
}

public class ArticleTag
{
    public int ArticleId { get; set; }
    public int TagId { get; set; }

    // navigation property
    public virtual Article Article { get; set; }
    public virtual Tag Tag { get; set; …
Run Code Online (Sandbox Code Playgroud)

linq lambda ef-code-first c#-4.0

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

EF5不会创建枚举列

我有这样的模型:

namespace Ad.NegCred.Data.Model {
    public enum DataKind {
        F, //Takibe al?n?p henüz tahsil edilmeyen ferdi kredi bildirimi
        FA, //Ayn? dönemde takibe al?nan ve tahsil edilen ferdi kredi bildirimi
        FF, //daha önceki dönemlerde takibe al?nd??? bildirilmi? ferdi kredi tahsil bildirimi
        K, //Takibe al?n?p henüz tahsil edilmeyan kredi kart?
        KA, //Ayn? dönemde takibe al?nan ve tahsil edilen kredi kart?
        KF //Daha önceki dönemlerde takibe al?nd??? bildirilmi? kredi kart? tahsil    bildirimi
    }

    public class Datum {
        [Key]
        public long Id { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework ef-code-first .net-4.5 entity-framework-5

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

为什么ModelState.IsValid不能正常用于外键约束?

我有一个MeterPeak实体,这个实体有一个MeterReading实体作为外键(包含在问题的底部).MeterReading实体具有由MeterSiteId和DateTime组成的复合主键.

所以我的理解是,在我的MeterPeak实体中,我必须输入一个MeterSiteId和一个与现有MeterReading实体匹配的DateTime,以满足外键约束.我不应该被允许链接到不存在的外键.

但是,在MeterPeakController的编辑操作中,我有以下代码

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(MeterPeak meterpeak)
    {
        if (ModelState.IsValid)
        {
            unitOfWork.MeterPeakRepository.Update(meterpeak);
            unitOfWork.Save();
            return RedirectToAction("Index");
        }
        ViewBag.MeterSiteId = new SelectList(unitOfWork.MeterSiteRepository.Get(b => true), "Id", "Location", meterpeak.MeterSiteId);
        return View(meterpeak);
    }
Run Code Online (Sandbox Code Playgroud)

当我输入与现有仪表读数不匹配的MeterSiteId和DateTime并尝试保存时,我希望ModelState.IsValid检查返回false,但它不会.它只有在到达unitOfWork.save()行时才会失败,并且在将此更改保存到dbcontext时出错

The UPDATE statement conflicted with the FOREIGN KEY constraint "FK_dbo.MeterPeaks_dbo.MeterReadings_MeterSiteId_DateTime"
Run Code Online (Sandbox Code Playgroud)

为什么ModelState.IsValid在到达dbcontext.save之前没有找到这个问题?

public class MeterPeak
{
    [Key]
    public int Id { get; set; }

    [ForeignKey("PeakReading"), Column(Order = 1)]
    public int MeterSiteId { get; set; }

    [ForeignKey("PeakReading"), Column(Order = 2)]
    public DateTime DateTime { get; set; }

    public int? Rating { …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc entity-framework ef-code-first entity-framework-5

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

EF 4.1 Code First:多对多

我有2个实体,让我们说A和B.它们之间的关系是多对多的所以我有另一个实体,让我们说C.

表A的列:
-Id(PK) - >由数据库生成的类型int
-PropertyA1
-PropertyA2
-PropertyA3

表B的列:
-Id(PK) - >由数据库
-Description 生成的类型int

表C的列(对于此表,我不确定是否更好地添加由数据库生成的额外列Id作为前面的表): -
IdA(PK和实体A的外键)
-IdB(PK和外键实体B)

表B具有在种子方法上插入的固定值(覆盖).其条目如下所示:
Id描述
1"部分描述1"
2"部分描述2"
3"部分描述3"

从表单中,用户引入与表A(propertyA1,...,propeprtyA3)相关的信息,然后单击按钮将数据保存到数据库.

用户单击按钮的表单将数据保存到数据库后,首先执行以下操作:

   A a = new A(){ PropertyA1=something_1,
                  PropertyA2=something_2,
                  PropertyA3=something_3 };

   context.A.Add(a);
   context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

然后在保存对数据库的更改之后,我有数据库生成的Id(我在保存到数据库之前没有id),也就是a.Id,现在我可以通过执行以下操作来继续向表C添加一个条目:

  B b = this.ObtainAppropriateB();
  C c = new C(){ IdA = a.Id,
                 IdB = b.Id };

  context.C.Add(c);
  context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

我的问题是:
1)我不知道a.Id以前在context.A.Add(a)之后做context.SaveChanges因为它是由数据库生成的.
2)如果在context.C.Add(c)之后context.SaveChanges失败了,我怎么能回滚以前完成的工作?:
context.A.Add(a);
context.SaveChanges();

我不能做以下因为我没有a.Id以前做SaveChanges:

   A a = new A(){ PropertyA1=something_1,
                  PropertyA2=something_2,
                  PropertyA3=something_3 };

   context.A.Add(a);
   B b = this.ObtainAppropriateB();
   C c = new C(){ …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework ef-code-first

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

EF Code First使用多对多关系

我正在使用Visual Studio 2010,C#4.0和Entity Framework 5.0.我多年来一直在使用数据库优先开发,但我正在尝试先迁移到代码并遇到问题.阅读和搜索似乎没有解决问题

我已将我的问题简化如下 - 我有两个类 - 评估者和文档.

public class Assessor
{
    public int AssessorID { get; set; }
    public virtual List<Document> Documents { get; set; }       
}

public class Document
{
    public int DocumentID { get; set; }
    public string DocumentLocation { get; set; }
    public string DocumentName { get; set; }
    public virtual List<Assessor> Assessors { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

与上下文

public class DocumentAssignment : DbContext
{
    public DbSet<Assessor> Assessors { get; set; }
    public DbSet<Document> …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework ef-code-first

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

带有Oracle表/视图的Entity Framework 5是否不存在不一致?

关于此问题的任何帮助或建议,我们将不胜感激。

我目前正在从事一个项目,该项目需要将我们的数据层从本地MS SQL实例更改为托管Oracle解决方案。

以前,我们使用实体框架(代码优先)构建数据层。我想对新数据层采用相同的方法。我们有几个使用此库的应用程序,因此,尝试使新数据层与原始数据层(对象,名称等)保持尽可能近的距离是理想的。我知道Code-First没有得到Oracle的正式支持(正在进行中),但是在其他方面取得了一些成功的地方,已经读过了。因此,由于这些原因,我试图这样做。

我已经创建了Oracle EF数据层,以使其与原始MS SQL EF数据层尽可能地匹配。我当前遇到的问题是,当我运行查询以从数据层检索第一个或默认实体时,出现以下异常:

Oracle.DataAccess.Client.OracleException:ORA-00942:表或视图不存在

如果我使用完全相同的DbContext实例,而是使用DbContext.Database.SqlQuery(sqlString)运行sql查询,则它将起作用。我之所以提及这是因为我已经阅读了“表或视图不存在”错误,是指数据库权限问题。这次似乎并非如此,因为我在同一连接对象中使用了完全相同的连接字符串。唯一的区别似乎在于使用传统的sql语句与DbSet实体(和配置)。

我的实体是相对简单的平面对象。

public class HourlyPrice
{
    public DateTime MarketDate { get; set; }
    public int HourEnding { get; set; }
    public string LocationId { get; set; }
    public string LocationName { get; set; }
    public decimal? Price { get; set; }
    public int IsValid { get; set; }
    public DateTime DateInserted { get; set; }
    public DateTime? DateUpdated { get; set; }
}

public HourlyPriceConfiguration(string viewName)
{
    ToTable(viewName);
    HasKey(x => new …
Run Code Online (Sandbox Code Playgroud)

c# sql oracle entity-framework ef-code-first

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

如何升级Entity Framework 5 Code First的DataAnnotations

我正在尝试从EF 4.3.1升级到EF 5,也从.Net 4升级到.Net 4.5.这是一个给我带来麻烦的课程的例子:

using System.ComponentModel.DataAnnotations;

public class MyClass
{
    [Key, Column(Order = 0)]
    public int CompositeKey1Id { get; set; }

    [Key, Column(Order = 1)]
    public int CompositeKey2Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

首先我得到错误Cannot resolve symbol 'Column'.

所以我添加, using System.ComponentModel.DataAnnotations.Schema;因为ColumnAttribute移动到Schema命名空间.现在我收到一个Ambiguous reference错误,因为在EntityFramework.dll和System.ComponentModel.DataAnnotations.dll中都存在ColumnAttribute.

所以我尝试删除System.ComponentModel.DataAnnotations.dll作为参考,现在我得到Cannot resolve symbol 'Key'KeyAttribute在该DLL中,但不是在EntityFramework.dll中.

除非在EF5中不再需要KeyAttribute,否则我将不得不降级到.Net 4以获得此代码进行编译.这不可能是对的,是吗?我在这里错过了什么?

.net c# entity-framework ef-code-first entity-framework-5

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

EF代码首先是NotMapped属性

为什么在以下示例中需要[NotMapped]属性:

public virtual ICollection<Blog> Blogs { get; set; }

[NotMapped]
    public List<Blog> NewBlogs{
        get{
            return Blogs.Where(x=>x.Date > DateTime.Now).ToList();
        }
    }
Run Code Online (Sandbox Code Playgroud)

没有[NotMapped]属性,我得到一个异常:

列名称Blog_ID无效

数据库中的列名是BlogID.

编辑

我希望,没有setter的属性永远不会直接映射到数据库,并且首先会被代码自动忽略.

.net c# entity-framework ef-code-first

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

EF中连接和断开的POCO

  1. 连接和断开连接的"POCO"首先在EF代码中意味着什么?
  2. 你能解释一下如何在不同场景中使用它们吗?

entity-framework poco ef-code-first

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