如何使用Entity Framework 6.0创建对象?

时间:2015-06-30 15:09:37

标签: entity-framework-6

我在我的项目中使用Entity Framework 6.0代码第一种方法。我有几个如下定义的实体类

public class RequestTicket
{
   public long Id {get;set;}
   public string TicketNumber {get;set;}
   public Contact OwnedBy {get;set;}
   public long OwnedById {get;set;}
}

public class Contact
{
    public long Id {get;set;}
    public string name {get;set;}
}

public class RequestTicketRepository
{
    private readonly EntityContext _context;
    public RequestTicketRepository()
    {  
       _context = new EntityContext();
    }
    public AddRequestTicket(RequestTicket newTicket)
   {
       _context.RequestTickets.Add(newTicket);
       _context.SaveChanges();
    }
}

此处RequestTicket类的属性OwnedBy是另一个类Contact

当我在存储库中使用AddRequestTicket实例调用RequestTicket方法并且其属性Contact具有现有OwnedBy对象时,它正在{{{}创建一个条目1}}表和RequestTicket表中的一个条目。我没想到在Contact中创建了一个条目,因为我传递了一个具有正确id的现有联系人对象。

有人可以告诉我,为避免创建联系人条目,我该怎么办?

1 个答案:

答案 0 :(得分:0)

我使用您提供的代码创建了一个示例程序,但我没有看到您描述的问题。我能够添加一个联系人然后将其拉出并将其分配给新的RequestTicket。这不会导致创建另一个联系人...

class Program
{
    static void Main(string[] args)
    {
        using (var entityContext = new EntityContext())
        {
            // get existing contact (let's assume we know it is ID 1)
            var contact = entityContext.Contacts.Single(c => c.Id == 1);

            // create a new RequestTicket and assign that contact to it
            var rt = new RequestTicket {OwnedBy = contact, TicketNumber = "125"};

            // add the request ticket
            entityContext.RequestTickets.Add(rt);

            // save
            entityContext.SaveChanges();
        }
    }
}

虽然您没有包含它,但这里是您引用的EntityContext类:

public class EntityContext : DbContext
{
    public IDbSet<RequestTicket> RequestTickets { get; set; }
    public IDbSet<Contact> Contacts { get; set; }
}

请记住,没有充分的理由将DbContext的派生与另一个“Repository”对象包装起来。 IDbSet已经实现了存储库模式,因此您创建了一个不必要的抽象。

如果您想再提供有关问题的详细信息,请相应地修改您的帖子。

以下是数据库结构和数据的一些屏幕截图:

enter image description here

enter image description here