Entity framework 4 实体框架4.0。实体创建

Entity framework 4 实体框架4.0。实体创建,entity-framework-4,Entity Framework 4,我们有两个列相同的实体,但实体名称不同。我可以使用第一个实体实例创建2个实体吗 我们尝试执行.AddObjectEntity2 name,entityOneinstance,但失败 请说明这是否可行或其他方法 提前感谢由于实体的类型不同,您的添加操作肯定会失败 我认为在实体类型之间需要一个映射器或显式/隐式转换操作符 为了清楚起见,对于对话解决方案,假设您有Entity1和Entity2,并且都有属性、属性、属性_1、属性_2和属性_3。我假设您有默认的代码生成策略,而不是POCO或其他。然后您

我们有两个列相同的实体,但实体名称不同。我可以使用第一个实体实例创建2个实体吗

我们尝试执行.AddObjectEntity2 name,entityOneinstance,但失败

请说明这是否可行或其他方法


提前感谢

由于实体的类型不同,您的添加操作肯定会失败

我认为在实体类型之间需要一个映射器或显式/隐式转换操作符

为了清楚起见,对于对话解决方案,假设您有Entity1和Entity2,并且都有属性、属性、属性_1、属性_2和属性_3。我假设您有默认的代码生成策略,而不是POCO或其他。然后您可以使用隐式转换运算符添加部分Entity2和Entity1类,例如:

public partial class Entity2
{
    public static implicit operator Entity2(Entity1 entity1)
    {
        return new Entity2()
        {
            Property = entity1.Property,
            Property_1 = entity1.Property_1,
            Property_2 = entity1.Property_2,
            Property_3 = entity1.Property_3
        };
    }
}
因此,您现在可以执行以下操作:

using (var provider = new Model1Container12())
{
    Entity1 entity1 = new Entity1();
    provider.AddObject(provider.Entity2Set.Name, entity1);
    // or
    provider.AddToEntity2Set(entity1);
}
转换将按照您在转换运算符定义中的定义隐式进行


我不知道实体框架本身是否有解决这种情况的方法,但转换对我来说似乎是一种解决方法。或者你也可以用这种东西。我没有这方面的详细信息。

在EF4中,引入了ObjectSet,这有点漂亮

我的方法是使用存储库模式

首先创建一个抽象基类

    public abstract class BaseRepository<T> where T : class
{
    #region Members

    protected IObjectSet<T> _objectSet;

    #endregion

    #region Ctor

    public BaseRepository(ObjectContext context)
    {
        _objectSet = context.CreateObjectSet<T>();
    }

    #endregion

    #region Methods

    public void Add(T entity)
    {
        _objectSet.AddObject(entity);
    }

    public IEnumerable<T> GetAll()
    {
        return _objectSet;
    }

    #endregion
}
然后为需要访问的每个选项卡创建一个派生类

示例接口和实现: 生产者是表POCO对象

接口:

    public interface IProducerRepository
{
    Producer GetById(int id);
    void Add(Producer entity);
    IEnumerable<Producer> GetAll();
}
实施:

    public class ProducerRepository : BaseRepository<Producer>, IProducerRepository
{
    #region Ctor

    public ProducerRepository(ObjectContext context) : base(context)
    {
    }

    #endregion

    #region Methods

    public Producer GetById(int id)
    {
        return _objectSet.SingleOrDefault(e => e.Id == id);
    }


    #endregion
}

希望这有助于-

意味着我必须为每个实体创建单独的实体实例?这两个实体中的任何一个都不能被重用以将另一个实体添加到数据库表中?请澄清。我想您需要创建一个类型为的实例,并将其添加到实体上下文中。我已经更新了我的答案。希望能有所帮助。如果答案不清楚,或者我误解了情况,请通知我。