entity framework6:使用界面作为导航属性可能吗?
有没有办法在EF6中使用接口作为导航属性? 我找到了EF4或更早版本的相关主题,似乎不太可能; 一般来说,从那时起,inheritance似乎已经有了很大的改进,但我还没有找到办法让这个特定问题发挥作用。
例:
public interface IPerson { string name { get; set; } } public class Man : IPerson { /* ... */ } public class Woman : IPerson { /* ... */ } public interface ICar { IPerson driver { get; set; } } public class Car : ICar { public virtual IPerson driver { get; set; } // This won't map }
这有可能吗? 如果没有,那么做什么是明智的方法呢?
因为目前我没有看到任何方式让接口有一个可设置的属性,其类型是其他接口(例如ICar的IPerson属性),哪种打击我作为一个非常严重的设计限制?!
好的,对于那些可能在未来面临同样问题的人。 经过更多的测试后,我就是这样做的。
public interface IPerson { string name { get; set; } } public abstract class APerson : IPerson { public string name { get; set; } } public class Man : APerson { /* ... */ } public class Woman : APerson { /* ... */ } public interface ICar { IPerson driver { get; set; } } public class Car : ICar { // This maps to the database public virtual APerson driver { get; set; } // And this implements the interface ICar.driver { get { return (IPerson)driver; } set { if(!(value is APerson)) throw new InvalidCastException("driver must inherit from APerson"); driver = (APerson)value; } } }
当具有一对多/多对多关系时,这会变得有点棘手,对于这种情况,我编写了一个inheritance自Collection
这个解决方案绝对不是理想的,因为如果有人试图为不从APersoninheritance的驱动程序赋值,它会引发exception,因此这里没有编译时安全性。 但是,如果你真的想让你的界面保持独立和独立,这是我能想到的最好的解决方案。
上述就是C#学习教程:entity framework6:使用界面作为导航属性可能吗?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/953462.html