标签: code-first

实体框架代码首先多对多创建重复行

我的问题结果是有两个上下文.我重新编写了我的代码,只有一个上下文,我的问题就消失了.

我有一个User,它有一个UserContact列表,它本身有一个ContactOption.它是一个相当简单的1到多个,多对1,中间有UserContact表.

如果我将用户拉出数据库并创建一个新的UserContact,但将ContactOption设置为现有项目(我从数据库中取出),当我保存更改时,实体框架在数据库中创建一个新的ContactOption,基本上是我添加到UserContact的副本(除了它获得一个新的id).

我已经与它斗争了好几个小时,无法解决这个问题.有任何想法吗?

我正在使用Repository模式进行数据库查询,但我确保它们共享相同的上下文.

我用这个将用户拉出数据库:

var user = _context.Users.Include("UserContacts.ContactOption")
              .Where(id => id == 1);
Run Code Online (Sandbox Code Playgroud)

并提供以下联系方式:

var co = _context.ContactOptions.FirstOrDefault(c => c.Id == id);
Run Code Online (Sandbox Code Playgroud)

我将ContactOption添加到UserContact,如下所示:

var contactOption = _context.ContactOptions.FirstOrDefault(c => c.Id == someId);

var contact = new UserContact { ContactOption = contactOption  };
contact.Data = "someData";

user.UserContacts.Add(contact);
Run Code Online (Sandbox Code Playgroud)

我的模型看起来像这样:

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

    public virtual ICollection<UserContact> UserContacts { get; set; }
}

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

c# repository-pattern code-first entity-framework-4

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

EF Code First CTP 5和SQL SErver 2008 R2

我似乎无法让EF Code First与SQL Server 2008 R2一起使用.我得到的错误是"无效的对象名称'dbo.Movies'."

它不是自动创建表.

我的连接字符串:

<add name="MovieDBContext" connectionString="Server=(local); Database=Movies; Trusted_Connection=true; Integrated Security=True" providerName="System.Data.SqlClient" />

我的模型和上下文类:

public class Movie
{
    public int ID { get; set; }

    [Required(ErrorMessage = "Title is required")]
    public string Title { get; set; }

    [Required(ErrorMessage = "Date is required")]
    public DateTime ReleaseDate { get; set; }

    [Required(ErrorMessage = "Genre must be specified")]
    public string Genre { get; set; }

    [Required(ErrorMessage = "Price Required")]
    [Range(1, 100, ErrorMessage = "Price must be between $1 and …
Run Code Online (Sandbox Code Playgroud)

entity-framework code-first sql-server-2008-r2

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

多重约束违反了SQL Server 2008 - CodeFirst

我正在努力解决一个非常乏味的问题.我有一个名为Nation的类和一个名为NationAlly的类

public class Nation   
{
    public int ID {get; set;}
    public int name {get;set;}
    public List<NationAlly> NationAllies {get;set;}
}

public class NationAlly
{
    public int ID {get; set;}
    public int level {get;set;}
    public Nation toNation {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我正在使用EF 4和CodeFirst与一个名为NationsDB的DbContext来管理我在SQL Server 2008上的数据库.如果我创建一个Nation类型的新对象,我尝试调用countriesDB.SaveChanges,我得到以下异常:

"违反了多重约束.关系'CodeFirstNamespace.NationAlly_toNation'的角色'NationAlly_toNation_Target'具有多重性1或0..1."

我试图用NationAllies字段保存Nation字段为null并且不抛出此异常,数据库中的country表获取所有正确的值.

在我的数据库中,表Nation有2个字段:ID(主键),名称表NationAlly有3个字段:ID(主键),level,NationID这两个表链接的关系是NationAlly.NationID是外键和Nation .ID是主键.

不奇怪吗?在我眼中,NationAlly表应该有一个名为NationID1的字段,另一个叫做NationID2,以创建一个国家和其他国家名单之间的"关系".

我做错了什么?

entity-framework code-first sql-server-2008

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

实体框架4.1代码优先 - 仅使用数据注释定义多对多

是否可以仅使用数据注释在Entity Framework 4.1(Code First方法)中定义多对多关系,而无需使用模型构建器?

例如,类似于:

Product = { Id, Name, ... }
Category = { Id, Name, ... }
ProductCategory = { ProductId, CategoryId }
Run Code Online (Sandbox Code Playgroud)

你得到了照片.

我不希望ProductCategory在上下文中有两个多对一的中间实体,因为我没有任何额外的数据,只有两个FK.此外,我应该能够为中间表定义表名,以便与现有数据库一起使用.

entity-framework code-first data-annotations ef-code-first entity-framework-4.1

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

将数据导出为C#/ VB格式,以便在EF Code First的数据库初始化中使用它们

有时,样本数据很重要,但由于许多相关表格而无法生成.因此,在Entity Framework Code First中,我认为将它们插入DropCreateDatabaseIfModelChanges :: Seed()是一种优雅的方式.

但有没有办法将现有数据从数据库导出回字符串作为插入poco对象的C#/ VB语句?

如果它有效,我们可以使用它来优雅地备份数据,或者通过场景保存到多个.cs,根据需要切换它们以更好地进行测试等.

数据库导出为以下代码:

var students = new List<Student>
{
    new Student { FirstMidName = "Carson",   LastName = "Alexander", },
    new Student { FirstMidName = "Meredith", LastName = "Alonso",    },
    new Student { FirstMidName = "Arturo",   LastName = "Anand",     },
    // ...
};
students.ForEach(s => context.Students.Add(s));
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

database entity-framework export code-first

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

如何在创建数据库时首先在Entity Framework代码中填充数据?

我正在使用代码第一实体框架,我想知道如何在创建数据库时运行一些代码,以便我可以用一些数据填充我的数据库.(请注意,我要求创建数据库,而不是每次应用程序启动时).

有人知道我可以使用哪种方法或事件吗?

entity-framework code-first ef-code-first

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

实体框架:跟踪FK关联的变化

我在我的DbContext上覆盖了SaveChanges以实现审计日志.使用多对多关系或独立关联相对容易,因为EF为这些关系的任何更改创建了ObjectStateEntries.

我正在使用外键关联,当实体之间的关系发生变化时,所有得到的是ObjectStateEnty,例如实体"Title"的"PublisherID"属性已更改.对于人类而言,这显然是Title实体中的外键,但我如何在运行时确定它?有没有办法将此更改转换为"PublisherID"属性,以使外键所代表的实体成为EntityKey?

我假设我正在处理看起来像这样的实体:

public sealed class Publisher
{
    public Guid ID { get; set; }
    public string Name { get; set; }
    public ICollection<Title> Titles { get; set; }
}

public class Title
{
    public Guid ID { get; set; }
    public string Name { get; set; }
    public Guid? PublisherID { get; set; }
    public Publisher Publisher { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

还有EF EntityConfiguration代码,用于定义关系和外键:

public TitleConfiguration()
{
    HasOptional<Publisher>(t => t.Publisher).WithMany(
            p => p.Titles).HasForeignKey(t => t.PublisherID);
}
Run Code Online (Sandbox Code Playgroud)

我现在正在做的事似乎有点太复杂了.我希望有更优雅的方式来实现我的目标.对于ObjectStateEntry中的每个修改过的属性,我查看当前实体的所有ReferentialConstraints,看看是否有任何一个将它用作外键.从SaveChanges()调用以下代码:

private void …
Run Code Online (Sandbox Code Playgroud)

entity-framework poco code-first ef-code-first entity-framework-4.1

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

使用EF DbSet对数据进行排序

有没有办法将order by子句传递给EF中的DbSet类?

我正在使用C#

c# code-first entity-framework-4.1

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

EF 4.1映射问题

我有一个与自己有关系的班级:

public class Person
{
    public long ID { get; set; }
    public string Name { get; set; }

    public virtual Person Mother { get; set; }
    public virtual Person Father { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

当EF 4.1试图映射这个类时,我得到了以下错误:'无法确定类型'Model.Person'和'Model.person'之间关联的主要结束.必须使用关系流畅API或数据注释显式配置此关联的主要结尾.

我已经尝试了EF 4.1主题- 模型关系的解决方案,但没有成功.

我怎么解决这个问题?

谢谢!

entity-framework code-first entity-framework-4.1

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

代码首先导致所需关系是可选的?

public class Client
{
    public Int32 ClientID { get; set; }

    public virtual ICollection<Inquiry> InquiryManufacturers { get; set; }
    public virtual ICollection<Product> Products { get; set; }
    public virtual ICollection<Inquiry> InquiryRetailers { get; set; }
}

public class Product
{
    public Int32 ProductID { get; set; }

    public Int32 ClientID { get; set; }
    public virtual Client Client { get; set; }

    public virtual ICollection<Inquiry> Inquiries { get; set; }
}

public class Inquiry
{
    public Int32 InquiryID { get; …
Run Code Online (Sandbox Code Playgroud)

c# poco code-first cascading-deletes ef-code-first

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